Permisos de IAM
Lab: IAM vulnerable
Última actualización
Lab: IAM vulnerable
Última actualización
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
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.
Solamente con el privilegio iam:CreateAccessKey es posible realizar la explotación
Laboratorio para probar este tipo de escalamiento:
Punto de entrada: privesc4-CreateAccessKey-user, con la siguientes políticas:
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
Siempre listar el whoiam:
Listado del rol:
Listar las información de ARN de la política del usuario a auditar:
Si se intenta añadir al usuario directamente al grupo de administradores no se podrá, generará un error
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:
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
:
Siendo parte del grupo de administradores es game over.
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.
Usuario de entrada: privesc5-CreateLoginProfile-user con la siguiente política:
Configurar un perfil en AWS CLI
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:
Si el usuario tiene doble factor de autenticación, este método de ataque no va a funcionar.
Con estos permisos, se puede cambiar la contraseña de cualquier usuario, generando una disrupción del servicio, se tiene que tener cuidado en auditorias.
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":
El ID (12 dígitos) de la cuenta raíz, es un valor sensible.
Con acceso al panel de administración web, es game over.
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.
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:
Luego copiar el Access Key y el SecretAccessKey en aws configure --profile privesc6
Si se intenta agregar el usuario privesc6 directamente al grupo de administradores local, generar un error:
Se tiene que hacer uso del permiso update-login-profile :
Al realizar un cambio o actualización de la contraseña de cualquier usuario, puede generar una disrupción del servicio y generar una alerta.
Finalmente ingresar por medio web como el anterior caso
Un atacante con el permiso iam:AddUserToGroup puede utilizarlo para añadirse a un grupo IAM existente en la cuenta de AWS.
Usuario del laboratorio: privesc13-AddUserToGroup-user
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
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: