Aller au contenu
Blog

simple-git · Node.js · npm

simple-git CVE-2026-102828 : injection de commande via la config Git, corrigée en 4.0.1

CVE-2026-102828 (9.8) dans simple-git : une config Git contrôlée par l'utilisateur peut exécuter une commande. Corrigé en 4.0.1. Comment vérifier ton code.

4 min de lectureCVE-2026-102828

CVE-2026-102828 touche simple-git, la bibliothèque Node.js qui sert d'interface à la commande git dans un grand nombre d'outils : CI maison, générateurs de changelog, bots de dépôt, plateformes internes de déploiement. Publiée par NVD le 29 septembre 2026, notée 9.8.

ChampValeur
CVSS 3.19.8 (CRITICAL)
VecteurAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Publication NVD2026-09-29
Versions touchéesde 3.15.0 à 4.0.1 (exclue)
Version corrigée4.0.1
CISA KEVnon (à la date de rédaction)

Ce que fait la faille

simple-git embarque par défaut un garde-fou, blockUnsafeOperationsPlugin, censé refuser les options de configuration Git dangereuses — celles qui font exécuter une commande externe à Git. Le problème : la famille de clés trailer.<token>.cmd n'était pas classée comme dangereuse.

the default blockUnsafeOperationsPlugin does not classify trailer.<token>.cmd as unsafe configuration.

Conséquence : une application qui laisse passer des valeurs contrôlées par un utilisateur dans SimpleGitOptions.config ou dans des arguments -c peut amener Git à lancer une commande shell choisie par l'attaquant. La commande s'exécute avec l'identité et les droits du processus Node.js.

Le 9.8 suppose le pire cas : une application exposée qui transmet ces valeurs sans filtrage. Si ton code ne passe jamais de configuration Git issue d'une entrée externe, tu n'es pas exposé par cette voie — mais la mise à jour reste à faire.


Le vrai sujet : la config Git est du code

Cette CVE est le dernier épisode d'une histoire connue. Git possède plusieurs options de configuration qui désignent une commande à exécuter : éditeur, pager, helpers, hooks, filtres, et donc trailers. Chaque bibliothèque qui encapsule Git finit par maintenir une liste noire de ces options, et chaque liste noire finit par en oublier une.

La règle à retenir n'est pas « mets à jour simple-git », c'est :

ne jamais passer de configuration Git contrôlée par l'utilisateur, quelle que soit la bibliothèque.

Un nom de branche, un message de commit, une URL de dépôt sont des données. Une clé ou une valeur de configuration Git, c'est potentiellement une commande.


Suis-je concerné ?

  1. Identifier la version installée — y compris en dépendance transitive :
    npm ls simple-git
    
  2. Chercher dans ton code les usages de l'option config à la construction de l'instance simple-git, et les appels qui ajoutent des arguments -c.
  3. Remonter l'origine des valeurs : viennent-elles d'une constante, d'un fichier de config déployé, ou d'une requête HTTP, d'un webhook, d'un fichier fourni par un utilisateur ?

Le cas critique est le troisième. Un outil interne qui accepte « des options Git avancées » depuis une interface web en fait partie.


Détection

  • Processus enfants inattendus sous le processus Node.js : un shell ou un binaire système lancé par git, hors de ce que fait normalement l'application
  • Journaux applicatifs : valeurs de configuration Git inhabituelles reçues en entrée
  • Connexions sortantes depuis l'hôte de l'application vers des destinations inconnues
  • Fichiers modifiés dans les répertoires accessibles au compte de service Node.js

Mitigation

  1. Mettre à jour simple-git en 4.0.1 ou ultérieur, et régénérer le lockfile pour couvrir les dépendances transitives.
  2. Supprimer tout chemin par lequel une entrée externe atteint SimpleGitOptions.config ou un argument -c. Si une option est vraiment nécessaire, la choisir dans une liste fermée côté serveur, jamais la recopier.
  3. Exécuter le service avec un compte minimal : la commande injectée hérite de ses droits. Pas de root, pas de secrets de production inutiles dans l'environnement.
  4. Isoler les opérations Git sur des dépôts non fiables (conteneur éphémère, système de fichiers en lecture seule hors répertoire de travail).
  5. Auditer les autres wrappers Git de ton parc sur le même principe : la classe de faille n'est pas propre à simple-git.

Pourquoi surveiller vos dépendances en continu

simple-git n'apparaît presque jamais dans un inventaire : c'est une dépendance d'outillage, souvent transitive, embarquée dans des scripts que personne ne considère comme exposés. C'est exactement là qu'une 9.8 reste ouverte des mois.

Avec cveo.tech, recense les composants critiques de tes applications et reçois une alerte dès qu'une CVE critique les concerne.

Chaque lundi

Les CVE critiques de la semaine, dans votre boîte mail

Un email par semaine : les vulnérabilités CVSS ≥ 9 publiées ces sept derniers jours, et nos dernières analyses. Rien d'autre.

Double confirmation par email. Désinscription en un clic, à tout moment.

Surveillez votre propre parc

Recherche CVE, inventaire de parc et alertes email, gratuitement.