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

This commit is contained in:
Translator
2025-09-30 19:17:53 +00:00
parent 4dbcd75474
commit 45524eec4a

View File

@@ -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 roles 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)