AWS - STS Privesc

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 assumi-la, portanto qualquer usuário poderá privesc para as permissões associadas a essa função.

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

Você pode se passar por um papel executando:

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

Impacto Potencial: Privesc para o papel.

Observe 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 essa permissão, é possível gerar credenciais para se passar por qualquer usuário:

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

Esta é a maneira como essa permissão pode ser concedida de forma segura, sem dar acesso para se passar por outros usuários:

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

{
"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, em geral, você poderia usar algo como:

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:

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:

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

Supporte o HackTricks

Last updated