AWS - STS Privesc

Support HackTricks

STS

sts:AssumeRole

Cada rol se crea con una política de confianza del rol, esta política indica quién puede asumir el rol creado. Si un rol de la misma cuenta dice que una cuenta puede asumirlo, significa que la cuenta podrá acceder al rol (y potencialmente privesc).

Por ejemplo, la siguiente política de confianza del rol indica que cualquiera puede asumirlo, por lo tanto cualquier usuario podrá privesc a los permisos asociados con ese rol.

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

Puedes suplantar un rol ejecutando:

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

Impacto Potencial: Privesc al rol.

Tenga en cuenta que en este caso el permiso sts:AssumeRole debe ser indicado en el rol a abusar y no en una política perteneciente al atacante. Con una excepción, para asumir un rol de una cuenta diferente la cuenta del atacante también necesita tener el sts:AssumeRole sobre el rol.

sts:GetFederationToken

Con este permiso es posible generar credenciales para suplantar a cualquier usuario:

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

Esta es la forma en que se puede otorgar este permiso de manera segura sin dar acceso para suplantar a otros usuarios:

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

sts:AssumeRoleWithSAML

Una política de confianza con este rol otorga a los usuarios autenticados a través de SAML acceso para suplantar el rol.

Un ejemplo de una política de confianza con este permiso es:

{
"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 generar credenciales para suplantar el rol en general, podrías usar algo como:

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

Pero los proveedores pueden tener sus propias herramientas para facilitar esto, 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 al rol.

sts:AssumeRoleWithWebIdentity

Este permiso otorga la capacidad de obtener un conjunto de credenciales de seguridad temporales para usuarios que han sido autenticados en una aplicación móvil, web, EKS... con un proveedor de identidad web. Aprende más aquí.

Por ejemplo, si una cuenta de servicio de EKS debería poder suplantar un rol de IAM, tendrá un token en /var/run/secrets/eks.amazonaws.com/serviceaccount/token y puede asumir el rol y obtener credenciales haciendo 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 Federación

Apoya a HackTricks

Last updated