AWS - STS Enum

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 impersonaçã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.

Impersonação de Função

A ação AssumeRole fornecida pelo AWS STS é crucial, pois permite que um principal adquira credenciais para outro principal, essencialmente o impersonando. 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 estiver permitindo especificamente um ARN de função como em:

{
"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:

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

A função que está tentando assumir precisará de uma permissão específica sts:AssumeRole sobre essa função para assumi-la.

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

Enumeração

# 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:

Pós Exploração

Persistência

Referências

Support HackTricks

Last updated