AWS - STS Enum

Apoya a HackTricks

STS

AWS Security Token Service (STS) está diseñado principalmente para emitir credenciales temporales y de privilegios limitados. Estas credenciales pueden ser solicitadas para AWS Identity and Access Management (IAM) usuarios o para usuarios autenticados (usuarios federados).

Dado que el propósito de STS es emitir credenciales para la suplantación de identidad, el servicio es inmensamente valioso para escalar privilegios y mantener persistencia, aunque no tenga una amplia gama de opciones.

Suplantación de Asunción de Rol

La acción AssumeRole proporcionada por AWS STS es crucial ya que permite a un principal adquirir credenciales para otro principal, esencialmente suplantándolos. Al invocarse, responde con un ID de clave de acceso, una clave secreta y un token de sesión correspondiente al ARN especificado.

Para los Penetration Testers o miembros del Red Team, esta técnica es instrumental para la escalada de privilegios (como se detalla aquí). Sin embargo, vale la pena señalar que esta técnica es bastante conspicua y puede no sorprender a un atacante.

Lógica de Asunción de Rol

Para asumir un rol en la misma cuenta si el rol a asumir está permitiendo específicamente un ARN de rol como en:

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

El rol priv-role en este caso, no necesita ser específicamente permitido para asumir ese rol (con ese permiso es suficiente).

Sin embargo, si un rol está permitiendo a una cuenta asumirlo, como en:

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

El rol que intenta asumirlo necesitará un permiso específico sts:AssumeRole sobre ese rol para asumirlo.

Si intentas asumir un rol de una cuenta diferente, el rol asumido debe permitirlo (indicando el rol ARN o la cuenta externa), y el rol que intenta asumir el otro DEBE tener permisos para asumirlo (en este caso, esto no es opcional, incluso si el rol asumido está especificando un ARN).

Enumeración

# 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

En la siguiente página puedes ver cómo abusar de los permisos de STS para escalar privilegios:

AWS - STS Privesc

Post Exploitation

AWS - STS Post Exploitation

Persistence

AWS - STS Persistence

References

Apoya HackTricks

Last updated