# AWS - STS Enum {{#include ../../../banners/hacktricks-training.md}} ## STS **AWS Security Token Service (STS)** è principalmente progettato per emettere **credenziali temporanee e con privilegi limitati**. Queste credenziali possono essere richieste per utenti di **AWS Identity and Access Management (IAM)** o per utenti autenticati (utenti federati). Dato che lo scopo di STS è **emettere credenziali per impersonificazione dell'identità**, il servizio è immensamente prezioso per **l'escalation dei privilegi e il mantenimento della persistenza**, anche se potrebbe non avere una vasta gamma di opzioni. ### Impersonificazione del Ruolo Assunto L'azione [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) fornita da AWS STS è cruciale in quanto consente a un principale di acquisire credenziali per un altro principale, impersonandolo essenzialmente. Al momento dell'invocazione, risponde con un ID chiave di accesso, una chiave segreta e un token di sessione corrispondente all'ARN specificato. Per i Penetration Tester o i membri del Red Team, questa tecnica è strumentale per l'escalation dei privilegi (come elaborato [**qui**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)). Tuttavia, vale la pena notare che questa tecnica è piuttosto evidente e potrebbe non sorprendere un attaccante. #### Logica del Ruolo Assunto Per assumere un ruolo nello stesso account se il **ruolo da assumere consente specificamente un ARN di ruolo** come in: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:::role/priv-role" }, "Action": "sts:AssumeRole", "Condition": {} } ] } ``` Il ruolo **`priv-role`** in questo caso, **non deve essere specificamente autorizzato** ad assumere quel ruolo (con quella autorizzazione è sufficiente). Tuttavia, se un ruolo consente a un account di assumerlo, come in: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:::root" }, "Action": "sts:AssumeRole", "Condition": {} } ] } ``` Il ruolo che si sta cercando di assumere avrà bisogno di un **permesso specifico `sts:AssumeRole`** su quel ruolo **per assumerlo**. Se si tenta di assumere un **ruolo** **da un altro account**, il **ruolo assunto deve consentirlo** (indicando il **ARN** del ruolo o l'**account esterno**), e il **ruolo che sta cercando di assumere** l'altro **DEVE** avere i **permessi per assumerlo** (in questo caso non è opzionale anche se il ruolo assunto specifica un ARN). ### Enumerazione ```bash # Get basic info of the creds aws sts get-caller-identity aws sts get-access-key-info --access-key-id # 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 --token-code ``` ### Privesc Nella pagina seguente puoi controllare come **abuse STS permissions to escalate privileges**: {{#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}}