Repo jacking : une menace cachée pour vos dépôts de code

Ces derniers mois, une menace pesant sur les repository open source est apparue, le RepoJacking. En accédant au compte, un hacker peut injecter du code malveillant dans des projets qui utilisent ce dépôt Git comme dépendance. Point sur cette menace et ces conséquences.

Dans l'environnement du développement logiciel actuel, les menaces de sécurité évoluent constamment et parfois plus rapidement que les pratiques de dev. L'une de ces menaces, de plus en plus courante, est le repo jacking. Une forme d'attaque qui cible les dépôts de logiciels sur des plateformes telles que GitHub, GitLab, et Bitbucket. Alors que les organisations continuent d'adopter les pratiques DevOps, il est essentiel d'intégrer la sécurité (DevSecOps) pour se protéger contre ces risques croissants.

Qu'est-ce que le Repo jacking ?

Le repo jacking, ou détournement de dépôt, se produit lorsqu'un acteur malveillant prend le contrôle d'un nom de dépôt qui était précédemment associé à un utilisateur légitime. Cela se produit généralement lorsqu'un utilisateur modifie son nom d'utilisateur sur GitHub, et que l'ancien nom devient disponible pour quiconque souhaite s'enregistrer. Un hacker peut alors s'enregistrer avec l'ancien nom d'utilisateur, créer un dépôt portant le même nom, et potentiellement injecter du code malveillant. Malgré des mesures de sécurité comme le mécanisme de retrait de noms de dépôt populaire de GitHub, qui empêche la réutilisation des noms de dépôt les plus populaires, les attaquants trouvent encore des moyens de contourner ces protections.

Comment se produit le Repo jacking ?

Le repo jacking exploite souvent une « condition de concurrence » entre la création du dépôt et le changement de nom d'utilisateur. Par exemple :

  1. Un utilisateur avec un dépôt nommé `utilisateur/repo` change son nom d'utilisateur.
  2. L'ancien dépôt `utilisateur/repo` est considéré comme "retiré" et devrait être protégé.
  3. Un attaquant crée un nouveau compte avec l'ancien nom d'utilisateur et réplique le dépôt.

En exploitant les délais et les vulnérabilités techniques, les attaquants peuvent détourner le nom de domaine retiré, redirigeant ainsi le trafic destiné au dépôt d'origine vers leur version malveillante. Cette technique a été démontrée par des vulnérabilités récentes affectant des milliers de packages de code dans divers langages de programmation, notamment Go, PHP, et Swift.

Risques et conséquences du Repo jacking

Les risques associés au repo jacking sont importants, en particulier dans les environnements qui dépendent des chaînes d'approvisionnement logicielles. Les dépôts compromis peuvent entraîner :

  • Distribution massive de logiciels malveillants : Les attaquants injectent du code malveillant qui peut être involontairement propagé dans toute la chaîne logicielle, en amont comme en aval
  • Fuites de données : Des données sensibles peuvent être exposées si des acteurs malveillants accèdent aux dépôts.
  • Perturbations opérationnelles : Les organisations peuvent faire face à des temps d'arrêt et à des pertes de productivité lors de la remédiation des systèmes compromis.

Des études récentes ont montré que des millions de dépôts pourraient être vulnérables au repo jacking, soulignant la gravité de cette menace.

Comment protéger votre organisation contre le Repo jacking

Adopter une approche DevSecOps est essentiel pour atténuer les risques de repo jacking. Voici quelques stratégies clés :

  1. Renforcer la protection des noms de domaine : Surveillez régulièrement les noms de domaine des dépôts, en particulier lors des changements de nom d'utilisateur. Assurez-vous que les dépôts populaires sont protégés par le mécanisme de retrait de GitHub.
  2. Auditer et gérer les dépendances : Effectuez régulièrement des audits des dépendances et des dépôts pour détecter et empêcher l'utilisation de packages compromis. Automatisez ces vérifications pour garantir une sécurité continue.
  3. Utiliser des Outils de Sécurité : Utilisez des outils comme ChainJacking pour identifier les packages vulnérables et surveiller les dépôts pour détecter les activités suspectes.
  4. Renforcer l'authentification et l'autorisation : Mettez en place des méthodes d'authentification robustes, comme l'authentification à deux facteurs (2FA), et maintenez des contrôles d'accès stricts pour réduire les risques d'accès non autorisé. Pensez aussi aux accès aux repository Git de vos anciens salariés 😉

Appel au DevSecOps pour lutter contre le repo jacking

Des incidents récents soulignent la prévalence croissante du repo jacking. Par exemple, une vulnérabilité divulguée par les chercheurs en sécurité de Checkmarx a révélé que plus de 4 000 dépôts étaient exposés à des attaques potentielles de repo jacking en raison d'une faille dans les opérations de création de dépôt et de renommage de nom d'utilisateur de GitHub. Même après les efforts de GitHub pour corriger ces vulnérabilités, de nouvelles méthodes continuent d'émerger, posant une menace constante.

Alors que les attaques de la chaîne logicielle comme le repo jacking deviennent de plus en plus sophistiquées, l'intégration de la sécurité à chaque étape du cycle de vie du développement n'est plus optionnelle ; elle est impérative. En adoptant une approche DevSecOps, les organisations peuvent se défendre de manière proactive contre ces menaces et assurer la résilience de leurs écosystèmes logiciels.

Par Baptiste.casnedi