AWS - STS Enum

Support HackTricks

STS

AWS Security Token Service (STS) está diseñado principalmente para emitir credenciales temporales y de privilegio limitado. Estas credenciales pueden ser solicitadas para usuarios de AWS Identity and Access Management (IAM) 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 puede que no tenga una amplia gama de opciones.

Suplantació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ándolo. 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 testers de penetración o miembros del equipo rojo, 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 Suplantación de Rol

Para asumir un rol en la misma cuenta si el rol a asumir permite 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 permite que una cuenta lo asuma, 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 asumir 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 ARN del rol 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).

Enumeration

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

Support HackTricks

Last updated