En bref

  • CVE-2026-6951 : RCE critique CVSS 9.8 dans le paquet npm simple-git, dépendance massivement utilisée dans les pipelines CI/CD Node.js
  • Toutes les versions de simple-git antérieures à 3.36.0 sont vulnérables, y compris en dépendance transitive
  • Mettre à jour immédiatement vers simple-git 3.36.0 ou supérieur et auditer toutes les surfaces qui reçoivent des arguments contrôlés par l'utilisateur

Les faits

Publiée le 25 avril 2026, la vulnérabilité CVE-2026-6951 affecte simple-git, une bibliothèque npm omniprésente qui sert d'enveloppe Node.js pour les commandes git. Notée 9.8 sur l'échelle CVSS par le NVD, la faille permet à un attaquant non authentifié d'obtenir une exécution de code arbitraire à distance sans aucune interaction utilisateur. La racine du problème est un correctif incomplet pour CVE-2022-25912 : le patch d'origine bloquait l'option -c mais oubliait son équivalent long --config. Un attaquant qui peut influencer les arguments passés à simple-git peut donc activer protocol.ext.allow=always puis exploiter une source de clonage ext:: pour exécuter des commandes système arbitraires sur le serveur hôte. Le NVD comme l'avis Snyk classent l'attaque en vecteur réseau, complexité faible, sans privilège ni interaction (AV:N/AC:L/PR:N/UI:N), avec un impact maximal sur la confidentialité, l'intégrité et la disponibilité.

Le code vulnérable est exposé dès qu'une application accepte une option de clone, une URL de dépôt distant ou un argument git provenant d'une source extérieure : formulaire web, webhook GitHub, API REST de plateforme DevOps, ticket interne ou import IaC. Plusieurs dizaines de milliers de paquets npm dépendent transitivement de simple-git, ce qui démultiplie la surface d'attaque réelle.

Impact et exposition

simple-git cumule plusieurs millions de téléchargements hebdomadaires sur npm. Elle est embarquée dans des outils de scaffolding, des plateformes CI/CD, des bots GitHub, des intégrations IaC, des générateurs de boilerplate et de très nombreux services SaaS internes. Tout endpoint qui transmet une URL de dépôt fournie par un tiers à git.clone() ou un appel similaire constitue un point d'entrée exploitable. L'exécution se fait dans le contexte du processus Node.js appelant, donc avec les permissions de service du backend : accès aux secrets, aux variables d'environnement, aux tokens CI et au système de fichiers.

Aucun PoC public détaillé n'a encore été publié au moment de la rédaction, mais la portée du correctif et la simplicité de la chaîne d'exploitation rendent l'apparition d'exploits automatisés très probable dans les jours qui viennent. La vulnérabilité s'inscrit dans la lignée des récentes RCE via dépôt git malveillant qui ciblent les chaînes d'intégration continue.

Recommandations immédiates

  • Mettre à jour simple-git vers la version 3.36.0 ou supérieure dans tous les package.json et lockfiles, puis régénérer les node_modules
  • Auditer le code applicatif pour identifier tous les points où une URL de dépôt ou une option git transite via simple-git, et appliquer une liste blanche stricte (validation regex, refus du préfixe ext::, des protocoles non standards et de toute clé config contrôlée par l'utilisateur)
  • Pour les pipelines CI/CD, isoler les jobs de clone dans des conteneurs jetables sans accès réseau sortant ni secrets persistants
  • Surveiller les processus enfants git exécutés avec des arguments contenant protocol.ext.allow, core.sshCommand ou des sources ext::
  • Recensement du parc : npm ls simple-git, yarn why simple-git ou un scan SCA (npm audit, OSV-Scanner) sur tous les dépôts

⚠️ Urgence

Le score CVSS 9.8 et le caractère pré-authentifié de la faille placent cette vulnérabilité dans la catégorie « patcher en moins de 72 heures ». Toute application web ou pipeline CI qui accepte une URL git ou une option de clone doit être considérée comme exposée jusqu'à preuve du contraire. Voir aussi l'exploitation en 10 heures de Marimo pour mesurer la vitesse de transformation d'une telle CVE en attaque opportuniste.

Comment savoir si je suis vulnérable ?

À la racine de chaque projet Node.js, exécuter npm ls simple-git ou yarn why simple-git et lire la version résolue. Toute version inférieure à 3.36.0 est vulnérable, y compris en dépendance transitive. Pour un parc entier, scanner les package-lock.json avec un outil SCA (npm audit, Snyk, Dependabot, OSV-Scanner) en filtrant sur l'identifiant CVE-2026-6951.

Que faire si la mise à jour est bloquée ?

Si une dépendance amont impose une vieille version de simple-git, refactorer le code appelant pour ne jamais transmettre d'argument contrôlé par l'utilisateur dans le tableau d'options, supprimer toute prise en charge de sources de clone non standards (ext::, file://) et placer le service derrière un WAF qui rejette les chaînes contenant protocol.ext. Voir notre dossier RCE via input non assaini pour un cas comparable.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit