
Exploit pour la prise de contrôle de compte GitLab via CVE-2023-7028, démontrant le contournement de la réinitialisation de mot de passe en injectant l'e-mail de l'attaquant pour recevoir le jeton de réinitialisation.
GitLab est un gestionnaire de dépôts de code hébergé sur le web, largement adopté, offrant une plateforme complète pour la gestion du code source, l'intégration, la maintenance et la collaboration dans les projets de développement logiciel.CVE-2023-7028 est une vulnérabilité permettant à un attaquant de prendre le contrôle d'un compte utilisateur (Account TakeOver) via le formulaire reset password.versions suivantes de GitLab :
reset password, plus précisément au niveau du point de terminaison API POST /users/password de GitLab. L'attaquant exploite la faille dans le champ email en contournant la vérification du format incorrect, ce qui lui permet d'insérer son propre email. GitLab envoie alors le reset token à l'email de l'attaquant.Sur la base de ce code fourni par GitLab, nous observons ce qui suit :

La partie traitant la demande de réinitialisation du mot de passe se trouve dans le fichier spec/controllers/passwords_controller_spec.rb, qui permet de saisir plusieurs emails à partir de l'entrée, mais sans aucun mécanisme de vérification d'email pour confirmer qu'il s'agit bien de l'email de l'utilisateur.
Le serveur exige uniquement authenticity_token (un jeton caché anti-CSRF) de la part de l'attaquant dans la soumission du formulaire pour envoyer la demande de réinitialisation du mot de passe.

→ Nous pouvons donc insérer notre propre email pour recevoir le reset token de réinitialisation du mot de passe de l'email de la victime, et ainsi prendre le contrôle du compte utilisateur.
En interceptant la demande de réinitialisation du mot de passe, nous obtenons ce qui suit :

authenticity_token utilisé pour se protéger contre le CSRF ; le nom de l'email de l'utilisateur dont le mot de passe est réinitialisé est placé dans la variable user[email].Ajoutez l'email de l'attaquant avec le payload suivant &user[email][]=victim_email&user[email][]=attacker_email et envoyez la demande :

→ En vérifiant l'email de l'attaquant, nous constatons que le jeton de réinitialisation du mot de passe a été envoyé et qu'il est possible d'y accéder pour modifier le mot de passe.

