AWS - Cognito Privesc
Cognito
Pour plus d'informations sur Cognito, consultez :
pageAWS - Cognito EnumCollecte de crédentiels à partir du pool d'identités
Comme Cognito peut accorder des crédentiels de rôle IAM aux utilisateurs authentifiés et non authentifiés, si vous trouvez l'ID du pool d'identités d'une application (qui devrait être codée en dur dessus), vous pouvez obtenir de nouveaux crédentiels et donc une élévation de privilèges (à l'intérieur d'un compte AWS où vous n'aviez probablement même pas de crédential auparavant).
Pour plus d'informations, consultez cette page.
Impact potentiel : Élévation de privilèges directe vers le rôle de services attaché aux utilisateurs non authentifiés (et probablement à celui attaché aux utilisateurs authentifiés).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Avec cette autorisation, vous pouvez accorder n'importe quel rôle cognito aux utilisateurs authentifiés/non authentifiés de l'application Cognito.
Si l'application cognito n'a pas les utilisateurs non authentifiés activés, vous pourriez également avoir besoin de l'autorisation cognito-identity:UpdateIdentityPool
pour l'activer.
Impact potentiel : Élévation de privilèges directe vers n'importe quel rôle cognito.
cognito-identity:update-identity-pool
cognito-identity:update-identity-pool
Un attaquant avec cette autorisation pourrait par exemple définir un Pool d'utilisateurs Cognito sous son contrôle ou tout autre fournisseur d'identité où il peut se connecter comme un moyen d'accéder à ce Pool d'identités Cognito. Ensuite, simplement se connecter sur ce fournisseur d'utilisateurs lui permettra d'accéder au rôle authentifié configuré dans le Pool d'identités.
Il est également possible d'abuser de cette autorisation pour permettre l'authentification de base:
Impact potentiel : compromettre le rôle IAM authentifié configuré à l'intérieur du pool d'identités.
cognito-idp:AdminAddUserToGroup
cognito-idp:AdminAddUserToGroup
Cette autorisation permet d'ajouter un utilisateur Cognito à un groupe Cognito, donc un attaquant pourrait abuser de cette autorisation pour ajouter un utilisateur sous son contrôle à d'autres groupes avec des privilèges meilleurs ou des rôles IAM différents :
Impact potentiel : Élévation de privilèges vers d'autres groupes Cognito et rôles IAM attachés aux groupes de pools d'utilisateurs.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Un attaquant avec ces autorisations pourrait créer/mettre à jour des groupes avec chaque rôle IAM pouvant être utilisé par un fournisseur d'identité Cognito compromis et faire en sorte qu'un utilisateur compromis fasse partie du groupe, accédant ainsi à tous ces rôles :
Impact potentiel : Élévation de privilèges vers d'autres rôles IAM Cognito.
cognito-idp:AdminConfirmSignUp
cognito-idp:AdminConfirmSignUp
Cette autorisation permet de vérifier une inscription. Par défaut, n'importe qui peut s'inscrire aux applications Cognito. Si cette autorisation est laissée, un utilisateur pourrait créer un compte avec n'importe quelles données et le vérifier avec cette autorisation.
Impact potentiel : Privilège indirect pour l'élévation de privilèges vers le rôle IAM du pool d'identités pour les utilisateurs authentifiés si vous pouvez enregistrer un nouvel utilisateur. Privilège indirect pour d'autres fonctionnalités de l'application en pouvant confirmer n'importe quel compte.
cognito-idp:AdminCreateUser
cognito-idp:AdminCreateUser
Cette autorisation permettrait à un attaquant de créer un nouvel utilisateur dans le pool d'utilisateurs. Le nouvel utilisateur est créé comme activé, mais devra changer son mot de passe.
Impact potentiel : Élévation de privilèges directe vers le rôle IAM du pool d'identités pour les utilisateurs authentifiés. Élévation de privilèges indirecte vers d'autres fonctionnalités de l'application en pouvant créer n'importe quel utilisateur
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
Cette autorisation peut être utile dans un scénario très particulier où un attaquant aurait trouvé les identifiants d'un utilisateur désactivé et aurait besoin de le réactiver.
Impact potentiel : Élévation indirecte des privilèges vers le rôle IAM du pool d'identités pour les utilisateurs authentifiés et les autorisations de l'utilisateur si l'attaquant disposait des identifiants d'un utilisateur désactivé.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Cette autorisation permet de se connecter avec la méthode ADMIN_USER_PASSWORD_AUTH. Pour plus d'informations, suivez le lien.
cognito-idp:AdminSetUserPassword
cognito-idp:AdminSetUserPassword
Cette autorisation permettrait à un attaquant de changer le mot de passe de n'importe quel utilisateur, lui permettant ainsi de se faire passer pour n'importe quel utilisateur (qui n'a pas activé la MFA).
Impact potentiel : Élévation de privilèges directe vers potentiellement n'importe quel utilisateur, donc accès à tous les groupes dont chaque utilisateur est membre et accès au rôle IAM authentifié du pool d'identités.
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 attaquant pourrait potentiellement abuser de cette autorisation pour définir un téléphone portable sous son contrôle comme MFA SMS d'un utilisateur.
SetUserMFAPreference : Similaire à la précédente, cette autorisation peut être utilisée pour définir les préférences MFA d'un utilisateur afin de contourner la protection MFA.
SetUserPoolMfaConfig: Similaire à la précédente, cette autorisation peut être utilisée pour définir les préférences MFA d'un pool d'utilisateurs afin de contourner la protection MFA.
UpdateUserPool: Il est également possible de mettre à jour le pool d'utilisateurs pour modifier la politique MFA. Vérifiez le cli ici.
Impact potentiel: Élévation indirecte des privilèges vers potentiellement n'importe quel utilisateur dont l'attaquant connaît les identifiants, ce qui pourrait permettre de contourner la protection MFA.
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
Un attaquant ayant cette autorisation pourrait modifier l'e-mail ou le numéro de téléphone ou tout autre attribut d'un utilisateur sous son contrôle pour tenter d'obtenir plus de privilèges dans une application sous-jacente. Cela permet de modifier un e-mail ou un numéro de téléphone et de le définir comme vérifié.
Impact potentiel : Privilège d'escalade indirect potentiel dans l'application sous-jacente utilisant Cognito User Pool qui accorde des privilèges en fonction des attributs de l'utilisateur.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Un attaquant avec cette autorisation pourrait créer un nouveau Client de Pool d'Utilisateurs moins restreint que les clients de pool existants. Par exemple, le nouveau client pourrait permettre n'importe quel type de méthode d'authentification, ne pas avoir de secret, avoir la révocation de jetons désactivée, permettre aux jetons d'être valides pendant une période plus longue...
La même chose peut être faite si au lieu de créer un nouveau client, un client existant est modifié.
Dans la ligne de commande (ou la mise à jour) vous pouvez voir toutes les options, vérifiez-le !.
Impact potentiel : Possible élévation de privilèges indirecte vers l'utilisateur autorisé du pool d'identités utilisé par le pool d'utilisateurs en créant un nouveau client qui assouplit les mesures de sécurité et permet à un attaquant de se connecter avec un utilisateur qu'il a pu créer.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Un attaquant pourrait abuser de cette autorisation pour créer des utilisateurs en téléchargeant un fichier CSV contenant de nouveaux utilisateurs.
Impact potentiel : Élévation directe des privilèges vers le rôle IAM du pool d'identités pour les utilisateurs authentifiés. Élévation indirecte des privilèges vers d'autres fonctionnalités de l'application en pouvant créer n'importe quel utilisateur.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Un attaquant pourrait créer un nouveau fournisseur d'identité pour ensuite être en mesure de se connecter via ce fournisseur.
Impact potentiel : Élévation de privilèges directe vers le rôle IAM du pool d'identités pour les utilisateurs authentifiés. Élévation de privilèges indirecte vers d'autres fonctionnalités de l'application en pouvant créer n'importe quel utilisateur.
Analyse cognito-sync:*
Il s'agit d'une autorisation très courante par défaut dans les rôles des pools d'identités Cognito. Même si un joker dans une autorisation semble toujours mauvais (surtout venant d'AWS), les autorisations données ne sont pas très utiles d'un point de vue d'un attaquant.
Cette autorisation permet de lire les informations d'utilisation des pools d'identités et les identifiants d'identité à l'intérieur des pools d'identités (qui ne sont pas des informations sensibles). Les identifiants d'identité peuvent avoir des ensembles de données qui leur sont assignés, qui sont des informations sur les sessions (AWS les définit comme un jeu sauvegardé). Il est possible que cela contienne des informations sensibles (mais la probabilité est assez faible). Vous pouvez trouver sur la page d'énumération comment accéder à ces informations.
Un attaquant pourrait également utiliser ces autorisations pour s'inscrire à un flux Cognito qui publie des changements sur ces ensembles de données ou un lambda qui se déclenche sur des événements Cognito. Je n'ai pas vu cela être utilisé, et je ne m'attendrais pas à trouver des informations sensibles ici, mais ce n'est pas impossible.
Outils automatiques
Pacu, le framework d'exploitation AWS, inclut désormais les modules "cognito__enum" et "cognito__attack" qui automatisent l'énumération de tous les actifs Cognito dans un compte et signalent les configurations faibles, les attributs utilisateur utilisés pour le contrôle d'accès, etc., et automatisent également la création d'utilisateurs (y compris le support MFA) et l'élévation de privilèges basée sur des attributs personnalisés modifiables, des informations d'identité utilisables du pool, des rôles assumables dans les jetons d'identité, etc.
Pour une description des fonctions des modules, consultez la partie 2 du billet de blog. Pour les instructions d'installation, consultez la page principale de Pacu.
Utilisation
Exemple d'utilisation de l'attaque cognito__attack pour tenter la création d'utilisateur et tous les vecteurs d'élévation de privilèges contre un pool d'identités donné et un client de pool d'utilisateurs :
Exemple d'utilisation de cognito__enum pour rassembler tous les pools d'utilisateurs, clients de pool d'utilisateurs, pools d'identités, utilisateurs, etc. visibles dans le compte AWS actuel :
Cognito Scanner est un outil CLI en python qui implémente différentes attaques sur Cognito, y compris une escalade de privilèges.
Installation
Utilisation
Pour plus d'informations, consultez https://github.com/padok-team/cognito-scanner
Dernière mise à jour