AWS - Cognito Privesc
Cognito
Para más información sobre Cognito, consulta:
AWS - Cognito EnumRecopilación de credenciales desde Identity Pool
Dado que Cognito puede otorgar credenciales de roles IAM tanto a usuarios autenticados como a usuarios no autenticados, si localizas el ID del Identity Pool de una aplicación (que debería estar codificado en ella), puedes obtener nuevas credenciales y, por lo tanto, realizar una escalada de privilegios (dentro de una cuenta de AWS donde probablemente ni siquiera tenías credenciales previamente).
Para más información, consulta esta página.
Impacto potencial: Escalada directa al rol de servicios adjunto a los usuarios no autenticados (y probablemente al adjunto a los usuarios autenticados).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Con este permiso, puedes otorgar cualquier rol de cognito a los usuarios autenticados/no autenticados de la aplicación de Cognito.
Si la aplicación de Cognito no tiene habilitados los usuarios no autenticados, es posible que también necesites el permiso cognito-identity:UpdateIdentityPool
para habilitarlo.
Impacto potencial: Escalada directa de privilegios a cualquier rol de Cognito.
cognito-identity:update-identity-pool
cognito-identity:update-identity-pool
Un atacante con este permiso podría, por ejemplo, configurar un Grupo de Usuarios de Cognito bajo su control u otro proveedor de identidad donde pueda iniciar sesión como una forma de acceder a este Grupo de Identidades de Cognito. Luego, simplemente iniciar sesión en ese proveedor de usuarios le permitirá acceder al rol autenticado configurado en el Grupo de Identidades.
También es posible abusar este permiso para permitir la autenticación básica:
Impacto Potencial: Comprometer el rol IAM autenticado configurado dentro del grupo de identidad.
cognito-idp:AdminAddUserToGroup
cognito-idp:AdminAddUserToGroup
Esta permiso permite agregar un usuario de Cognito a un grupo de Cognito, por lo tanto, un atacante podría abusar de este permiso para agregar un usuario bajo su control a otros grupos con privilegios mejores o diferentes roles IAM:
Impacto Potencial: Escalada de privilegios a otros grupos de Cognito y roles de IAM adjuntos a Grupos de Pools de Usuarios.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Un atacante con estos permisos podría crear/actualizar grupos con cada rol de IAM que puede ser utilizado por un Proveedor de Identidad de Cognito comprometido y hacer que un usuario comprometido forme parte del grupo, accediendo a todos esos roles:
Impacto potencial: Escalada de privilegios a otros roles IAM de Cognito.
cognito-idp:AdminConfirmSignUp
cognito-idp:AdminConfirmSignUp
Esta permiso permite verificar un registro. Por defecto, cualquiera puede registrarse en aplicaciones de Cognito, si se deja así, un usuario podría crear una cuenta con cualquier dato y verificarla con este permiso.
Impacto Potencial: Escalada de privilegios indirecta al rol IAM del grupo de identidades para usuarios autenticados si puedes registrar un nuevo usuario. Escalada de privilegios indirecta a otras funcionalidades de la aplicación al poder confirmar cualquier cuenta.
cognito-idp:AdminCreateUser
cognito-idp:AdminCreateUser
Esta permiso permitiría a un atacante crear un nuevo usuario dentro del grupo de usuarios. El nuevo usuario se crea como habilitado, pero necesitará cambiar su contraseña.
Impacto Potencial: Escalada de privilegios directa al rol IAM del grupo de identidades para usuarios autenticados. Escalada de privilegios indirecta a otras funcionalidades de la aplicación al poder crear cualquier usuario
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
Este permiso puede ayudar en un escenario muy específico donde un atacante haya encontrado las credenciales de un usuario deshabilitado y necesite habilitarlo nuevamente.
Impacto Potencial: Escalada de privilegios indirecta al rol IAM del grupo de identidades para usuarios autenticados y permisos del usuario si el atacante tuviera credenciales de un usuario deshabilitado.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Este permiso permite iniciar sesión con el método ADMIN_USER_PASSWORD_AUTH. Para obtener más información, sigue el enlace.
cognito-idp:AdminSetUserPassword
cognito-idp:AdminSetUserPassword
Este permiso permitiría a un atacante cambiar la contraseña de cualquier usuario, lo que le permitiría hacerse pasar por cualquier usuario (que no tenga habilitado el MFA).
Impacto Potencial: Escalada de privilegios directa a potencialmente cualquier usuario, lo que permite acceder a todos los grupos de los que cada usuario es miembro y acceder al rol IAM autenticado del grupo de identidades.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Un atacante podría potencialmente abusar de este permiso para establecer un teléfono móvil bajo su control como MFA de SMS de un usuario.
SetUserMFAPreference: Similar to the previous one this permission can be used to set MFA preferences of a user to bypass the MFA protection.
SetUserPoolMfaConfig: Similar to the previous one this permission can be used to set MFA preferences of a user pool to bypass the MFA protection.
UpdateUserPool: También es posible actualizar el grupo de usuarios para cambiar la política de MFA. Verifica el cli aquí.
Impacto Potencial: Escalada de privilegios indirecta a potencialmente cualquier usuario del que el atacante conozca las credenciales, lo que podría permitir evitar la protección de MFA.
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
Un atacante con este permiso podría cambiar el correo electrónico o número de teléfono u otro atributo de un usuario bajo su control para intentar obtener más privilegios en una aplicación subyacente. Esto permite cambiar un correo electrónico o número de teléfono y establecerlo como verificado.
Impacto Potencial: Posible escalada de privilegios indirecta en la aplicación subyacente utilizando Cognito User Pool que otorga privilegios basados en atributos de usuario.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Un atacante con este permiso podría crear un nuevo Cliente de User Pool menos restringido que los clientes de pool existentes. Por ejemplo, el nuevo cliente podría permitir cualquier tipo de método de autenticación, no tener ningún secreto, tener la revocación de tokens deshabilitada, permitir que los tokens sean válidos por un período más largo...
Lo mismo se puede hacer si en lugar de crear un nuevo cliente, se modifica uno existente.
En la línea de comandos (o en la de actualización) puedes ver todas las opciones, ¡compruébalo!.
Impacto Potencial: Posible escalada de privilegios indirecta al grupo de identidades autorizadas utilizado por el grupo de usuarios al crear un nuevo cliente que relaje las medidas de seguridad y permita a un atacante iniciar sesión con un usuario que pudo crear.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Un atacante podría abusar de este permiso para crear usuarios subiendo un archivo CSV con nuevos usuarios.
Posible Impacto: Escalada de privilegios directa al rol IAM del grupo de identidades para usuarios autenticados. Escalada de privilegios indirecta a otras funcionalidades de la aplicación al poder crear cualquier usuario.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Un atacante podría crear un nuevo proveedor de identidad para luego poder iniciar sesión a través de este proveedor.
Impacto Potencial: Escalada de privilegios directa al rol IAM del grupo de identidades para usuarios autenticados. Escalada de privilegios indirecta a otras funcionalidades de la aplicación al poder crear cualquier usuario.
Análisis de cognito-sync:*
Esta es una permisión muy común de forma predeterminada en los roles de los Grupos de Identidades de Cognito. Aunque un comodín en los permisos siempre parece mal (especialmente viniendo de AWS), los permisos otorgados no son muy útiles desde la perspectiva de un atacante.
Esta permisión permite leer la información de uso de los Grupos de Identidades e IDs de Identidad dentro de los Grupos de Identidades (que no es información sensible). Los IDs de Identidad pueden tener Conjuntos de Datos asignados a ellos, que son información de las sesiones (AWS lo define como un juego guardado). Es posible que esto contenga algún tipo de información sensible (pero la probabilidad es bastante baja). Puedes encontrar en la página de enumeración cómo acceder a esta información.
Un atacante también podría usar estos permisos para inscribirse en un flujo de Cognito que publique cambios en estos conjuntos de datos o un lambda que se active en eventos de cognito. No he visto que se use esto, y no esperaría encontrar información sensible aquí, pero no es imposible.
Herramientas Automáticas
Pacu, el marco de explotación de AWS, ahora incluye los módulos "cognito__enum" y "cognito__attack" que automatizan la enumeración de todos los activos de Cognito en una cuenta y señalan configuraciones débiles, atributos de usuario utilizados para el control de acceso, etc., y también automatizan la creación de usuarios (incluido el soporte para MFA) y la escalada de privilegios basada en atributos personalizables modificables, credenciales de grupo de identidades utilizables, roles asumibles en tokens de identidad, etc.
Para obtener una descripción de las funciones de los módulos, consulta la parte 2 de la publicación del blog. Para instrucciones de instalación, consulta la página principal de Pacu.
Uso
Uso de muestra de cognito__attack para intentar la creación de usuarios y todos los vectores de escalada de privilegios contra un grupo de identidades y cliente de grupo de usuarios específicos:
Ejemplo de uso de cognito__enum para recopilar todos los grupos de usuarios, clientes de grupos de usuarios, grupos de identidades, usuarios, etc. visibles en la cuenta actual de AWS:
Cognito Scanner es una herramienta CLI en python que implementa diferentes ataques en Cognito, incluida una escalada de privilegios de privesc.
Instalación
Uso
Para obtener más información, visita https://github.com/padok-team/cognito-scanner
Last updated