Permisos de IAM

Lab: IAM vulnerable

La mayoría de los Administradores de AWS son conscientes de que los 4 permisos (IAM:CreateAccessKey IAM:CreateLoginProfile IAM:UpdateLoginProfile IAM:AddUserToGroup) son peligrosos de otorgar a cualquier usuario, ya que cada uno de ellos permite una forma de elevación de privilegios. En rara ocasiones, encontraremos políticas que permitan a un usuario con pocos privilegios cambiar explícitamente una contraseña para un usuario con muchos privilegios. Sin embargo, este tipo de configuraciones incorrectas ocurren, a menudo porque las políticas mal definidas tienen consecuencias inesperadas.

Un ejemplo sobre esta categoría es el uso de “listas negras” por medio de NotActions. Todos los permisos no incluidos en la lista negra están permitidos implícitamente.

El uso de una lista negra en lugar de un enfoque de lista blanca podría dejar la puerta abierta para que los usuarios aumenten sus privilegios.

A continuación se muestran ejemplos de elevación de privilegios con el uso de los permisos vulnerables de IAM

IAM:CreateAccessKey

Un atacante con el permiso iam:CreateAccessKey en otros usuarios puede crear un ID de clave de acceso y una clave de acceso secreta que pertenezca a otro usuario en el entorno de AWS.

Laboratorio para probar este tipo de escalamiento:

Lab: IAM - Vulnerable | Escenario: privesc4

Configuración inicial

Punto de entrada: privesc4-CreateAccessKey-user, con la siguientes políticas:

Políticas del usuario "privesc4-CreateAccessKey-user"

Autenticar desde AWS CLI y configurar las llaves de acceso en terminal para realizar la explotación:

Nota: con el --profile <ProfileName> permite crear nuevos perfiles para trabajar con diferentes cuentas, para este laboratorio de usara el perfil privesc4 y lab1test

Enumeración

Siempre listar el whoiam:

aws sts get-caller-identity --profile privesc4

Listado del rol:

aws iam list-attached-user-policies --user-name privesc4-CreateAccessKey-user

Listar las información de ARN de la política del usuario a auditar:

aws iam get-policy-version --policy-arn arn:aws:iam::num:policy/privesc4-CreateAccessKey --version-id v1

Explotación

Si se intenta añadir al usuario directamente al grupo de administradores no se podrá, generará un error

aws iam add-user-to-group --group-name Group-Root-Admin --user-name privesc4-CreateAccessKey-user --profile privesc4

Pero como el usuario privesc4-CreateAccessKey-user tiene la política de crear llaves de acceso de cualquier usuario ("Resource" : "*"), entonces se puede crear llaves para un usuario administrador:

aws iam create-access-key --user-name Administrator --profile privesc4

Es importante saber el nombre del usuario a generar la llave en el parámetro --user-name <Name>

Se podrían conocer los usuarios por medio de enumeración de IAM o por algun diccionario.

Finalmente asumes el rol de administrador o el usuario comprometido:

Y utilizar el comando de iam add-user-to-group para añadir al usuario privesc4-CreateAccessKey-user al grupo de administradores con el perfil --profile hack-admin:

aws iam add-user-to-group --group-name Group-Root-Admin --user-name privesc4-CreateAccessKey-user --profile hack-admin

Siendo parte del grupo de administradores es game over.

IAM:CreateLoginProfile

Un atacante con el permiso iam:CreateLoginProfile en otros usuarios puede crear una contraseña para iniciar sesión en la consola de AWS en cualquier usuario que no tenga ya un perfil de inicio de sesión configurado.

Lab: IAM - Vulnerable | Escenario: privesc5

Configuración Inicial

Usuario de entrada: privesc5-CreateLoginProfile-user con la siguiente política:

Configurar un perfil en AWS CLI

aws sts get-caller-identity --profile privesc5

Explotación

Como en el caso anterior, después de hacer enumeración y encontrar el usuario administrador o el usuario interesante a escalar y tomando en cuenta el permiso iam:CreateLoginProfile, se puede realizar el siguiente comando para generar una nueva contraseña:

aws iam create-login-profile --user-name <UserToHack> --password Password123! --no-password-reset-required --profile privesc5

Finalmente sabiendo la contraseña y la cuenta, para saber el ID de la cuenta o la cuenta raíz solo se toma del valor del comando aws sts get-caller-identity en el campo "Account": "12 Dígitos":

Login por web con usuario comprometido

Con acceso al panel de administración web, es game over.

IAM:UpdateLoginPorfile

Como el anterior caso, este permiso como su nombre indica, permite cambiar la contraseña utilizada para iniciar sesión en la consola web de AWS, para cualquier usuario que ya tenga un perfil de inicio de sesión configurado.

Lab: IAM - Vulnerable | Escenario: privesc6

Configuración Inicial

Usuario de entrada: privesc6-UpdateLoginProfile-user con la siguiente política:

Configurar Credenciales de acceso, ya sea creandolas desde la web como en los casos anteriores o desde un usuario administrador el siguiente comando:

aws sts assume-role --role-arn arn:aws:iam::651927172911:role/privesc6- UpdateLoginProfile-role --role-session-name privesc6

Luego copiar el Access Key y el SecretAccessKey en aws configure --profile privesc6

Explotación

Si se intenta agregar el usuario privesc6 directamente al grupo de administradores local, generar un error:

aws iam add-user-to-group --group-name Group-Root- Spartan --user-name privesc6-UpdateLoginProfile-user -- profile privesc6

Se tiene que hacer uso del permiso update-login-profile :

aws iam update-login-profile --user-name Spartan- Administrador --password Password321! --no-password- reset-required --profile privesc6

Finalmente ingresar por medio web como el anterior caso

IAM:AddUserToGroup

Un atacante con el permiso iam:AddUserToGroup puede utilizarlo para añadirse a un grupo IAM existente en la cuenta de AWS.

Lab: IAM - Vulnerable | Escenario: privesc13

Configuración Inicial

Usuario del laboratorio: privesc13-AddUserToGroup-user

Permiso de añadir un usuario a cualquier grupo

Por sí solo, este permiso no es malo, se tiene que especificar a que grupo se puede añadir usuarios ("Resource": "arn:sts:somegroup") y no dejar el permiso demasiado abierto ("Resource": "*")

Como en los caso anteriores, se tiene que crear credenciales de acceso y configurar con aws configure --profile privesc13

Explotación

La explotación de este caso es bastante sencilla, se busca enumerar los grupos existentes y proceder a añadirse a si mismo al grupo seleccionado, por ejemplo el grupo de administradores locales:

aws iam add-user-to-group --group-name Group-Root- Spartan --user-name privesc13-AddUserToGroup-user -- profile privesc13

Última actualización