Skip to content

internet_exposure

Graph · From docs/MCP_TOOLS.md on GitHub

Category graph · sensitivity confidential · capabilities read_state · readOnly true, destructive false, idempotent true, openWorld false · outputSchema no · timeout: layer default (300 s)

Assets whose collector flag says they are internet-exposed, each with the evidence. internet_rules lists (up to 10) ingress edges whose source or CIDR stands for the internet (0.0.0.0/0, ::/0, Azure Internet, Any, *) that reach the asset directly or through a security group or NSG attached to it; egress rules are skipped: edge_type, ports (the port range, else up to 10 explicit ports, else all), protocol, and via (the group's name, or the edge description). sensitive_ports_open is the intersection of those ports with 22, 3389, 3306, 5432, 1433, 27017, 6379, 9200, 5601, 8080 and 8443. protected_by_waf is true when a PROTECTS edge points at the asset.

Argument Type Default Constraints Description
asset_types string[] or null null Only these AssetType values.
include_reachable boolean false Also list assets transitively reachable from the internet in the graph.
limit integer 50 1..500 Maximum items to return.
cursor string "" Opaque cursor from a previous call's next_cursor; empty = first page.
dataset string "" Dataset name (see list_datasets). Empty = the active dataset.

With include_reachable: true the result adds graph_reachable: the assets the reachability analysis reaches from the internet over network-flow edges (total, truncated and the first limit node briefs, sorted by id). IAM grants and INVOKES edges are not followed, but the walk passes security groups, subnets and load balancers, so the set is wider than the flagged one.

Called with the arguments below, internet_exposure returned this structuredContent.

{"limit": 3}
{
  "dataset": "sample",
  "total": 6,
  "offset": 0,
  "returned": 3,
  "next_cursor": "c3.a2a0bceed308",
  "truncated": true,
  "items": [
    {
      "id": "bastion",
      "name": "bastion",
      "type": "EC2",
      "provider": "AWS",
      "region": "us-east-1",
      "account_id": "111111111111",
      "arn": "arn:aws:ec2:us-east-1:111111111111:instance/i-0bast",
      "internet_exposed": true,
      "open_findings": 1,
      "max_severity": "HIGH",
      "uri": "cloudg://assets/bastion",
      "internet_rules": [
        {
          "edge_type": "SECURITY_GROUP_RULE",
          "ports": "22",
          "protocol": "TCP",
          "via": "sg-admin"
        }
      ],
      "sensitive_ports_open": [
        22
      ],
      "protected_by_waf": false
    },
    {
      "id": "az-vm",
      "name": "jump-vm",
      "type": "VIRTUAL_MACHINE",
      "provider": "AZURE",
      "region": "westeurope",
      "account_id": "00000000-aaaa-bbbb-cccc-000000000001",
      "arn": "/subscriptions/00000000-aaaa-bbbb-cccc-000000000001/resourceGroups/rg-hub/providers/Microsoft.Compute/virtualMachines/jump-vm",
      "internet_exposed": true,
      "open_findings": 0,
      "max_severity": null,
      "uri": "cloudg://assets/az-vm",
      "internet_rules": [
        {
          "edge_type": "SECURITY_GROUP_RULE",
          "ports": "3389",
          "protocol": "TCP",
          "via": "jump-nsg"
        }
      ],
      "sensitive_ports_open": [
        3389
      ],
      "protected_by_waf": false
    },
    "... 1 more"
  ]
}

Called with the arguments below, internet_exposure returned this structuredContent.

{"asset_types": ["S3_BUCKET"], "include_reachable": true, "limit": 3}
{
  "dataset": "sample",
  "total": 1,
  "offset": 0,
  "returned": 1,
  "next_cursor": null,
  "truncated": false,
  "items": [
    {
      "id": "logs-bucket",
      "name": "prod-logs",
      "type": "S3_BUCKET",
      "provider": "AWS",
      "region": "us-east-1",
      "account_id": "111111111111",
      "arn": "arn:aws:s3:::prod-logs",
      "internet_exposed": true,
      "open_findings": 1,
      "max_severity": "HIGH",
      "uri": "cloudg://assets/logs-bucket",
      "internet_rules": [
        {
          "edge_type": "INTERNET_EXPOSED",
          "ports": "all",
          "protocol": null,
          "via": "bucket policy Principal *"
        }
      ],
      "sensitive_ports_open": [],
      "protected_by_waf": false
    }
  ],
  "graph_reachable": {
    "total": 12,
    "truncated": true,
    "items": [
      {
        "id": "alb-web",
        "name": "web-alb",
        "type": "LOAD_BALANCER",
        "provider": "AWS",
        "region": "us-east-1",
        "account_id": "111111111111",
        "arn": "arn:aws:elasticloadbalancing:us-east-1:111111111111:loadbalancer/app/web-alb/abc",
        "internet_exposed": true,
        "open_findings": 0,
        "max_severity": null,
        "uri": "cloudg://assets/alb-web"
      },
      {
        "id": "api-gw",
        "name": "public-api",
        "type": "API_GATEWAY",
        "provider": "AWS",
        "region": "us-east-1",
        "account_id": "111111111111",
        "arn": "arn:aws:apigateway:us-east-1::/restapis/a1b2c3",
        "internet_exposed": true,
        "open_findings": 0,
        "max_severity": null,
        "uri": "cloudg://assets/api-gw"
      },
      "... 1 more"
    ]
  }
}

Related: get_edges(internet_only=true, port=...), attack_paths, security_coverage (internet_facing_without_waf).