AWS - STS Enum

Support HackTricks

STS

AWS Security Token Service (STS) è progettato principalmente 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.

Assumere Ruolo Impersonificazione

L'azione AssumeRole 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 tester di penetrazione o i membri del Red Team, questa tecnica è strumentale per l'escalation dei privilegi (come elaborato qui). Tuttavia, vale la pena notare che questa tecnica è piuttosto evidente e potrebbe non sorprendere un attaccante.

Logica di Assunzione del Ruolo

Per assumere un ruolo nello stesso account se il ruolo da assumere consente specificamente un ARN di ruolo come in:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>: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:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>: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 permessi per assumerlo (in questo caso non è opzionale anche se il ruolo assunto specifica un ARN).

Enumerazione

# 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

Nella pagina seguente puoi controllare come abuse STS permissions to escalate privileges:

Post Exploitation

Persistence

References

Support HackTricks

Last updated