AWS - STS Privesc

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

sts:AssumeRole

Toda função é criada com uma política de confiança da função, essa política indica quem pode assumir a função criada. Se uma função da mesma conta diz que uma conta pode assumi-la, isso significa que a conta poderá acessar a função (e potencialmente privesc).

Por exemplo, a seguinte política de confiança da função indica que qualquer um pode assumí-la, portanto qualquer usuário poderá privesc para as permissões associadas a essa função.

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}

Você pode se passar por um papel executando:

bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname

Impacto Potencial: Privesc para o papel.

caution

Note que, neste caso, a permissão sts:AssumeRole precisa ser indicada no papel a ser abusado e não em uma política pertencente ao atacante.
Com uma exceção, para assumir um papel de uma conta diferente, a conta do atacante também precisa ter o sts:AssumeRole sobre o papel.

sts:GetFederationToken

Com esta permissão, é possível gerar credenciais para se passar por qualquer usuário:

bash
aws sts get-federation-token --name <username>

É assim que essa permissão pode ser concedida de forma segura, sem dar acesso para se passar por outros usuários:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}

sts:AssumeRoleWithSAML

Uma política de confiança com este papel concede acesso a usuários autenticados via SAML para se passar pelo papel.

Um exemplo de uma política de confiança com esta permissão é:

json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}

Para gerar credenciais para impersonar a função, você poderia usar algo como:

bash
aws sts  assume-role-with-saml --role-arn <value> --principal-arn <value>

Mas provedores podem ter suas próprias ferramentas para facilitar isso, como onelogin-aws-assume-role:

bash
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600

Impacto Potencial: Privesc para o papel.

sts:AssumeRoleWithWebIdentity

Esta permissão concede permissão para obter um conjunto de credenciais de segurança temporárias para usuários que foram autenticados em um aplicativo móvel, web, EKS... com um provedor de identidade web. Saiba mais aqui.

Por exemplo, se uma conta de serviço EKS deve ser capaz de impersonar um papel IAM, ela terá um token em /var/run/secrets/eks.amazonaws.com/serviceaccount/token e pode assumir o papel e obter credenciais fazendo algo como:

bash
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod

Abuso de Federação

AWS - Federation Abuse

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