# AWS - STS Enum

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

## STS

**AWS Security Token Service (STS)** je prvenstveno dizajniran za izdavanje **privremenih, ograničenih privilegija**. Ove privilegije se mogu zatražiti za **AWS Identity and Access Management (IAM)** korisnike ili za autentifikovane korisnike (federisane korisnike).

S obzirom na to da je svrha STS-a da **izdaje privilegije za impersonaciju identiteta**, usluga je izuzetno vredna za **eskalaciju privilegija i održavanje postojanosti**, iako možda nema širok spektar opcija.

### Assume Role Impersonation

Akcija [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) koju pruža AWS STS je ključna jer omogućava principalu da dobije privilegije za drugog principala, suštinski ga impersonirajući. Nakon poziva, odgovara sa ID-jem pristupnog ključa, tajnim ključem i sesijskim tokenom koji odgovara specificiranom ARN-u.

Za Penetration Testere ili članove Red Teama, ova tehnika je od suštinskog značaja za eskalaciju privilegija (kako je objašnjeno [**ovde**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)). Međutim, vredi napomenuti da je ova tehnika prilično očigledna i možda neće iznenaditi napadača.

#### Assume Role Logic

Da bi se preuzela uloga u istom nalogu, ako **uloga koju treba preuzeti specifično dozvoljava ARN uloge** kao u:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>:role/priv-role"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
```
Uloga **`priv-role`** u ovom slučaju **ne mora biti posebno dozvoljena** da preuzme tu ulogu (sa tom dozvolom je dovoljno).

Međutim, ako uloga dozvoljava nalogu da je preuzme, kao u:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
```
Uloga koju pokušavate da preuzmete će zahtevati **specifičnu `sts:AssumeRole` dozvolu** za tu ulogu **da bi je preuzeli**.

Ako pokušate da preuzmete **ulogu** **iz drugog naloga**, **preuzeta uloga mora to da dozvoli** (navodeći **ARN** uloge ili **spoljni nalog**), a **uloga koja pokušava da preuzme** drugu **MORA** da ima dozvole da je preuzme **(u ovom slučaju to nije opcionalno čak i ako preuzeta uloga specificira ARN)**.

### Enumeration
```bash
# Get basic info of the creds
aws sts get-caller-identity
aws sts get-access-key-info --access-key-id <AccessKeyID>

# Get CLI a session token with current creds
## Using CLI creds
## You cannot get session creds using session creds
aws sts get-session-token
## MFA
aws sts get-session-token --serial-number <arn_device> --token-code <otp_code>
```
### Privesc

Na sledećoj stranici možete proveriti kako da **zloupotrebite STS dozvole za eskalaciju privilegija**:

{{#ref}}
../aws-privilege-escalation/aws-sts-privesc.md
{{#endref}}

### Post Exploitation

{{#ref}}
../aws-post-exploitation/aws-sts-post-exploitation.md
{{#endref}}

### Persistence

{{#ref}}
../aws-persistence/aws-sts-persistence.md
{{#endref}}

## References

- [https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist](https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist)

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