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-escalat
This commit is contained in:
@@ -6,9 +6,9 @@
|
||||
|
||||
### `sts:AssumeRole`
|
||||
|
||||
Svaka uloga se kreira sa **politikom poverenja u ulogu**, ova politika navodi **ko može da preuzme kreiranu ulogu**. Ako uloga iz **istog naloga** kaže da nalog može da je preuzme, to znači da će taj nalog moći da pristupi ulozi (i potencijalno izvrši **privesc**).
|
||||
Svaka uloga se kreira sa **politikom poverenja uloge**, ova politika ukazuje **ko može preuzeti kreiranu ulogu**. Ako uloga iz **istog naloga** navodi da neki nalog može da je preuzme, to znači da će taj nalog moći da pristupi ulozi (i potencijalno izvrši **privesc**).
|
||||
|
||||
Na primer, sledeća politika poverenja u ulogu pokazuje da svako može da je preuzme, dakle **bilo koji korisnik će moći da privesc** na dozvole povezane sa tom ulogom.
|
||||
Na primer, sledeća politika poverenja uloge pokazuje da svako može da je preuzme, stoga će **bilo koji korisnik moći da izvrši privesc** nad dozvolama povezanim sa tom ulogom.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -23,20 +23,20 @@ Na primer, sledeća politika poverenja u ulogu pokazuje da svako može da je pre
|
||||
]
|
||||
}
|
||||
```
|
||||
Možete preuzeti ulogu pokretanjem:
|
||||
Možete да се представите као одређена улога покретањем:
|
||||
```bash
|
||||
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
|
||||
```
|
||||
**Potencijalni uticaj:** Privesc na rolu.
|
||||
**Potencijalni uticaj:** Privesc to the role.
|
||||
|
||||
> [!CAUTION]
|
||||
> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` mora biti **navedena u roli koju zloupotrebljavate** i ne u politici koja pripada attacker account.\
|
||||
> Sa jednom izuzetkom, da biste **preuzeli rolu iz drugog naloga** attacker account **takođe mora** imati **`sts:AssumeRole`** nad tom rolom.
|
||||
> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` mora biti **naznačena u roli koju se želi zloupotrebiti** i ne može biti samo u politici koja pripada napadaču.\
|
||||
> Sa jednom izuzetkom, da bi se **assume a role from a different account** nalog napadača **takođe mora** imati **`sts:AssumeRole`** nad tom rolom.
|
||||
|
||||
|
||||
### `sts:AssumeRoleWithSAML`
|
||||
|
||||
Politika poverenja sa ovom rolom daje **korisnicima autentifikovanim putem SAML-a pristup da se predstavljaju kao ta rola.**
|
||||
Politika poverenja vezana za ovu rolu daje **korisnicima autentifikovanim putem SAML mogućnost da se predstave kao ta rola.**
|
||||
|
||||
Primer politike poverenja sa ovom dozvolom je:
|
||||
```json
|
||||
@@ -59,21 +59,21 @@ Primer politike poverenja sa ovom dozvolom je:
|
||||
]
|
||||
}
|
||||
```
|
||||
Da biste generisali kredencijale kako biste se predstavili kao uloga, uopšteno možete koristiti nešto poput:
|
||||
Da biste generisali credentials za impersonate role, uopšteno možete koristiti nešto poput:
|
||||
```bash
|
||||
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
|
||||
```
|
||||
Ali **provajderi** mogu imati sopstvene **alate** da to olakšaju, kao što je [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
Ali **provajderi** mogu imati **svoje alate** koji to olakšavaju, kao [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
|
||||
```bash
|
||||
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
|
||||
```
|
||||
**Potencijalni uticaj:** Privesc to the role.
|
||||
**Potencijalni uticaj:** Privesc na ulogu.
|
||||
|
||||
### `sts:AssumeRoleWithWebIdentity`
|
||||
|
||||
Ovo dopuštenje omogućava dobijanje skupa privremenih bezbednosnih akreditiva za **korisnike koji su autentifikovani u mobilnoj aplikaciji, web aplikaciji, EKS...** kod provajdera web identiteta. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
Ovo dopuštenje omogućava pribavljanje skupa privremenih sigurnosnih akreditiva za **korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS...** pomoću provajdera web identiteta. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
|
||||
|
||||
Na primer, ako bi **EKS service account** trebalo da bude u mogućnosti da **preuzme IAM rolu**, imaće token u **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** i može **preuzeti rolu i dobiti akreditive** radeći nešto poput:
|
||||
For example, if an **EKS service account** should be able to **impersonate an IAM role**, it will have a token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** and can **assume the role and get credentials** doing something like:
|
||||
```bash
|
||||
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||
# The role name can be found in the metadata of the configuration of the pod
|
||||
@@ -86,9 +86,13 @@ aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/
|
||||
|
||||
### IAM Roles Anywhere Privesc
|
||||
|
||||
AWS IAM RolesAnywhere omogućava workload-ima izvan AWS-a da preuzmu IAM roles koristeći X.509 sertifikate. Ali kada trust policies nisu pravilno ograničene, mogu se zloupotrebiti za privilege escalation.
|
||||
AWS IAM Roles Anywhere omogućava radnim opterećenjima izvan AWS-a da preuzimaju IAM role koristeći X.509 sertifikate. Međutim, kada trust policy nisu pravilno ograničene, mogu se zloupotrebiti za eskalaciju privilegija.
|
||||
|
||||
Ova politika ne sadrži ograničenja koja definišu koji trust anchor ili certificate attributes su dozvoljeni. Kao rezultat, bilo koji sertifikat vezan za bilo koji trust anchor u nalogu može se koristiti da assume this role.
|
||||
Da bi se razumeo ovaj napad, neophodno je objasniti šta je trust anchor. Trust anchor u AWS IAM Roles Anywhere predstavlja root of trust entitet — sadrži javni sertifikat Certificate Authority (CA) koji je registrovan u nalogu, kako bi AWS mogao da validira predstavljene X.509 sertifikate. Na taj način, ako je klijentski sertifikat izdat od strane te CA i trust anchor je aktivan, AWS ga prepoznaje kao važeći.
|
||||
|
||||
Pored toga, profile je konfiguracija koja definiše koje atribute X.509 sertifikata (kao što su CN, OU ili SAN) će biti transformisani u session tags, a ti tagovi će kasnije biti upoređeni sa uslovima trust policy.
|
||||
|
||||
Ova policy nema ograničenja koja trust anchor ili atributi sertifikata su dozvoljeni. Kao rezultat, bilo koji sertifikat vezan za bilo koji trust anchor u nalogu može biti iskorišćen da preuzme ovu ulogu.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -108,9 +112,9 @@ Ova politika ne sadrži ograničenja koja definišu koji trust anchor ili certif
|
||||
}
|
||||
|
||||
```
|
||||
Za privesc, potreban je `aws_signing_helper` sa https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
Za privesc, `aws_signing_helper` je potreban i dostupan na https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
|
||||
|
||||
Zatim, koristeći važeći sertifikat, attacker može pivot into the higher privilege role
|
||||
Zatim, koristeći važeći sertifikat, attacker može pivot u ulogu sa višim privilegijama
|
||||
```bash
|
||||
aws_signing_helper credential-process \
|
||||
--certificate readonly.pem \
|
||||
@@ -119,13 +123,13 @@ aws_signing_helper credential-process \
|
||||
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
|
||||
--role-arn arn:aws:iam::123456789012:role/Admin
|
||||
```
|
||||
Trust anchor potvrđuje da klijentski sertifikat `readonly.pem` potiče od njegovog ovlašćenog CA; kada je trust anchor kreiran, javni sertifikat CA je bio uključen (i sada se koristi za validaciju `readonly.pem`). Unutar `readonly.pem` nalazi se javni ključ, koji AWS koristi da verifikuje da je potpis napravljen odgovarajućim privatnim ključem `readonly.key`.
|
||||
Trust anchor potvrđuje da `readonly.pem` sertifikat klijenta potiče od njegovog ovlašćenog CA, i u okviru tog `readonly.pem` sertifikata nalazi se javni ključ koji AWS koristi da proveri da je potpis napravljen odgovarajućim privatnim ključem `readonly.key`.
|
||||
|
||||
Sertifikat takođe dokazuje identitet i pruža atribute (kao što su CN ili OU) koje `default` profil transformiše u tagove, koje role’s trust policy može koristiti da odluči da li da odobri pristup; ako u trust policy nema uslova, ti tagovi se ignorišu i svako sa važećim sertifikatom može proći.
|
||||
Sertifikat takođe pruža atribute (kao što su CN ili OU) koje `default` profil prevodi u tagove, koje politika poverenja role može koristiti da odluči da li da odobri pristup. Ako u politici poverenja nema uslova, ti tagovi nemaju upotrebu i pristup se odobrava svakome ko ima važeći sertifikat.
|
||||
|
||||
Da bi ovaj napad bio moguć, i trust anchor i `default` profil moraju biti aktivni.
|
||||
|
||||
### Reference
|
||||
### References
|
||||
|
||||
- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user