Image de PixaBay

GitHub, la plateforme d’hébergement de code largement utilisée, a révélé que plus de 4 000 paquets de code sont vulnérables aux attaques de RepoJacking. Cette faille, découverte par les chercheurs de Checkmarx, a suscité des inquiétudes au sein de la communauté open source et a incité GitHub à agir rapidement.

L’attaque RepoJacking expliquée

RepoJacking, abréviation de détournement de dépôt (repository hijacking), est une technique utilisée par des acteurs malveillants pour prendre le contrôle d’un dépôt. Cette méthode d’attaque consiste à exploiter une condition de concurrence entre les processus de création de dépôt et de changement de nom d’utilisateur de GitHub. Essentiellement, les attaquants revendiquent l’ancien nom d’utilisateur d’un dépôt après que le créateur légitime a changé son nom d’utilisateur. Ils publient ensuite un dépôt malveillant avec le même nom, trompant les utilisateurs qui téléchargent du contenu malveillant.

Les conséquences de cette vulnérabilité sont considérables. Elle affecte plus de 4 000 paquets de code dans des langages de programmation comme Go, PHP et Swift, ainsi que les GitHub actions. Beaucoup de ces paquets ont gagné une popularité significative, avec plus de 1 000 étoiles. Nous n’avons pas encore découvert l’impact potentiel sur des millions d’utilisateurs et diverses applications.

La réponse de GitHub

Checkmarx a divulgué de manière responsable cette vulnérabilité à GitHub le 1er mars 2023, ce qui a incité la plateforme à agir. GitHub a introduit le mécanisme de « retrait des espaces de noms de dépôts populaires » pour prévenir le RepoJacking. Avec cette mesure de sécurité, les dépôts ayant plus de 100 clones au moment d’un changement de nom d’utilisateur sont considérés comme « retirés » et ne peuvent pas être utilisés par d’autres. La combinaison du nom d’utilisateur et du nom du dépôt est également considérée comme « retirée ».

Cependant, il s’est avéré que la mesure de sécurité était facilement contournée. Checkmarx a identifié plus de 4 000 paquets dans des gestionnaires de paquets qui utilisaient des noms d’utilisateur renommés, les exposant à un risque de détournement.

Comment l’attaque fonctionne

Checkmarx a décrit les étapes impliquées dans l’attaque RepoJacking:

  1. La victime possède l’espace de noms « victim_user/repo ».
  2. La victime renomme « victim_user » en « renamed_user ».
  3. Le dépôt « victim_user/repo » devient retiré.
  4. Un attaquant avec le nom d’utilisateur « attacker_user » crée simultanément un dépôt appelé « repo » et renomme le nom d’utilisateur « attacker_user » en « victim_user ».

Cela est réalisé via une requête API pour la création de dépôt et une interception de requête de renommage pour le changement de nom d’utilisateur.

Vulnérabilités persistantes

Cette découverte montre les risques persistants associés au mécanisme de « retrait des espaces de noms de dépôts populaires » de GitHub. De nombreux utilisateurs de GitHub, y compris ceux qui contrôlent des dépôts et paquets populaires, choisissent d’utiliser la fonctionnalité « Renommer l’utilisateur » proposée par GitHub. Cela fait du contournement du « retrait des espaces de noms de dépôts populaires » une cible attrayante pour les attaquants de la chaîne d’approvisionnement.

GitHub prend des mesures décisives

GitHub a résolu le problème à partir du 1er septembre 2023, après la divulgation responsable de Checkmarx. À la lumière de cette vulnérabilité, il est conseillé aux utilisateurs d’éviter d’utiliser les espaces de noms retirés pour minimiser la surface d’attaque. De plus, des audits de code approfondis sont recommandés pour s’assurer qu’il n’y a pas de dépendances qui pourraient conduire au détournement de dépôts.

La vulnérabilité de GitHub découverte par Checkmarx montre les menaces persistantes pour les projets open source. Les utilisateurs doivent rester vigilants car les méthodes d’attaque continuent d’évoluer.