CVE GitLab CVE-2023-7028 : comment détecter et corriger cette vulnérabilité ?

CVE GitLab CVE-2023-7028 : point technique sur cette nouvelle vulnérabilité
Maxime ALAY-EDDINE
janvier 13, 2024

Jeudi 11 janvier 2024, une nouvelle mise à jour GitLab de sécurité critique a été publiée, et a indiqué l’existence d’une nouvelle CVE GitLab CVE-2023-7028 qui permet de prendre le contrôle d’un compte utilisateur à partir de la fonction de réinitialisation de mots de passe. Cet article rassemble les informations disponibles sur la CVE-2023-7028, son fonctionnement et les moyens de détection et de correction.

Qu’est-ce que GitLab ?

GitLab est un logiciel de forge informatique, c’est-à-dire un outil de gestion et de maintenance pour des projets de développement logiciel. GitLab repose sur l’outil de gestion de version Git, et est particulièrement connu pour être un concurrent open source de GitHub : il permet d’avoir des fonctionnalités très proches de ce dernier, mais dans un environnement auto-hébergé (on premise).

GitLab est écrit en Ruby, comme Cyberwatch Vulnerability Manager, et est très utilisé par plus de 30 millions d’utilisateurs, dont les équipes de Cyberwatch.

Qu’est-ce que la CVE GitLab CVE-2023-7028 ?

La CVE GitLab référencée CVE-2023-7028 est une vulnérabilité critique qui permet de cibler un compte utilisateur sur une instance GitLab, et de demander la réinitialisation du mot de passe de ce compte à partir d’une adresse email contrôlée par l’attaquant.

Autrement dit, la CVE-2023-7028 permet à un attaquant de cibler un compte utilisateur sur une instance GitLab vulnérable, de demander à en réinitialiser le mot de passe, et de recevoir le lien de réinitialisation sur une adresse email contrôlée par cet attaquant.

Cette CVE est critique, et est mentionnée par l’ANSSI dans le bulletin d’alerte CERTFR-2024-ALE-002.

Comment fonctionne la CVE-2023-7028 ?

La CVE-2023-7028 repose sur la fonctionnalité GitLab introduite dans GitLab 16.1.0, par le code du 1er Mai 2023 qui permet de demander à réinitialiser un compte à partir de n’importe quelle adresse email vérifiée.

Le fichier app/models/concerns/recoverable_by_any_email.rb permet alors à un attaquant d’envoyer un tableau d’emails dans la requête de réinitialisation de mot de passe, dont un email devra être valide (celui de l’utilisateur ciblé) et un autre email sera choisi par l’attaquant. Le code lance alors une recherche des utilisateurs parmi ces emails, trouvera l’utilisateur ciblé, génèrera un jeton de réinitialisation pour cet utilisateur, mais enverra alors l’email de réinitialisation à l’ensemble des emails spécifiés dont celui de l’attaquant.

Code vulnérable de GitLab 16.1.0 qui contient la CVE GitLab CVE-2023-7028
Code vulnérable de GitLab 16.1.0 qui contient la CVE GitLab CVE-2023-7028

La mise à jour du 11 janvier 2024 corrige cela en vérifiant que les emails passés en paramètre ont bien été vérifiés et associés à un même compte utilisateur.

Code mis à jour de GitLab qui corrige la CVE GitLab CVE-2023-7028
Code mis à jour de GitLab qui corrige la CVE GitLab CVE-2023-7028

Comment exploiter la CVE GitLab CVE-2023-7028 ?

L’exploitation de la CVE GitLab CVE-2023-7028 se fait simplement en envoyant dans la requête de réinitialisation de mots de passe un tableau d’emails pour le Query Parameter (paramètre de requête) de l’entrée email.

Ainsi, la requête suivante va associer à la valeur email un tableau contenant « email_cible@domaine1.com » et « email_attaquant@domaine2.com » :

user[email][]=email_cible@domaine1.com&user[email][]=email_attaquant@domaine2.com

Si vulnérable, GitLab fera alors une recherche sur les utilisateurs ayant l’un de ces emails, et enverra le jeton de réinitialisation aux deux adresses emails.

Un attaquant peut alors fournir en deuxième paramètre un email sous son contrôle, pour voler le compte de la cible.

Plusieurs kits d’attaques sont disponibles sur Internet comme https://github.com/RandomRobbieBF/CVE-2023-7028/blob/main/CVE-2023-7028.py.

Quels sont les systèmes affectés par CVE-2023-7028 ?

D’après le bulletin de blog officiel de GitLab, les versions affectées sont les instances auto-hébergées de GitLab dans les configurations suivantes :

  • Versions 16.1 à 16.1.5
  • Versions 16.2 à 16.2.8
  • Versions 16.3 à 16.3.6
  • Versions 16.4 à 16.4.4
  • Versions 16.5 à 16.5.5
  • Versions 16.6 à 16.6.3
  • Versions 16.7 à 16.7.1

Comment corriger la CVE GitLab CVE-2023-7028 ?

Les utilisateurs de GitLab en mode auto-hébergé doivent installer une de ces versions :

  • GitLab 16.1.6
  • GitLab 16.2.9
  • GitLab 16.3.7
  • GitLab 16.4.5
  • GitLab 16.5.6
  • GitLab 16.6.4
  • GitLab 16.7.2

Les systèmes avec authentification par fédération d’identité obligatoire ne sont pas concernés par cette CVE GitLab

Cette CVE repose sur la capacité à voler le lien de réinitialisation d’un mot de passe d’un utilisateur, puis à se connecter avec le mot de passe choisi. Dans ce cadre, les instances GitLab qui ont activé l’authentification obligatoire par un système de fédération d’identité (SSO) ne sont donc pas attaquables à l’aide de cette CVE-2023-7028, bien qu’affectés par celle-ci au niveau du code.

Ce mécanisme peut être activé conformément à la documentation associée.

Comment détecter la CVE-2023-7028 ?

Vérifiez si vous utilisez l’une des versions de GitLab mentionnées plus haut dans cet article.

Les utilisateurs de Cyberwatch Vulnerability Manager peuvent d’ores et déjà détecter cette vulnérabilité depuis le 12 janvier 2024. N’hésitez pas à contacter notre équipe pour toute demande d’information.

Résultats des scans Cyberwatch pour la CVE GitLab CVE-2023-7028
Résultats des scans Cyberwatch pour la CVE GitLab CVE-2023-7028

Suivi des modifications

13/01/2024 à 14h49 GMT+1 : version initiale

Vous avez des questions ?

Vous souhaitez une démonstration ?

Contactez-nous et nos experts reviendront vers vous sous 24h.

Votre demande