AWS - STS Enum

Reading time: 4 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

STS

AWS Security Token Service (STS) é projetado principalmente para emitir credenciais temporárias e de privilégio limitado. Essas credenciais podem ser solicitadas para usuários do AWS Identity and Access Management (IAM) ou para usuários autenticados (usuários federados).

Dado que o propósito do STS é emitir credenciais para impessoalização de identidade, o serviço é imensamente valioso para escalonamento de privilégios e manutenção de persistência, mesmo que possa não ter uma ampla gama de opções.

Impessoalização de Função

A ação AssumeRole fornecida pelo AWS STS é crucial, pois permite que um principal adquira credenciais para outro principal, essencialmente impessoalizando-o. Ao ser invocada, ela responde com um ID de chave de acesso, uma chave secreta e um token de sessão correspondente ao ARN especificado.

Para Testadores de Penetração ou membros da Red Team, essa técnica é instrumental para escalonamento de privilégios (como detalhado aqui). No entanto, vale a pena notar que essa técnica é bastante conspícua e pode não pegar um atacante de surpresa.

Lógica de Assumir Função

Para assumir uma função na mesma conta, se a função a ser assumida permitir especificamente um ARN de função como em:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>:role/priv-role"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}

O papel priv-role neste caso, não precisa ser especificamente permitido para assumir esse papel (com essa permissão é suficiente).

No entanto, se um papel estiver permitindo que uma conta o assuma, como em:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<acc_id>:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}

O papel que está tentando assumir precisará de uma permissão específica sts:AssumeRole sobre esse papel para assumi-lo.

Se você tentar assumir um papel de uma conta diferente, o papel assumido deve permitir isso (indicando o ARN do papel ou a conta externa), e o papel que está tentando assumir o outro DEVE ter permissões para assumi-lo (neste caso, isso não é opcional, mesmo que o papel assumido esteja especificando um ARN).

Enumeração

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 página a seguir, você pode verificar como abusar das permissões do STS para escalar privilégios:

AWS - STS Privesc

Post Exploitation

AWS - STS Post Exploitation

Persistence

AWS - STS Persistence

References

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks