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.
| Champ | Valeur |
|---|---|
| CVSS 3.1 | 9.8 (CRITICAL) |
| Vecteur | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Publication NVD | 2026-09-29 |
| Versions touchées | de 3.15.0 à 4.0.1 (exclue) |
| Version corrigée | 4.0.1 |
| CISA KEV | non (à 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>.cmdas 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é ?
- Identifier la version installée — y compris en dépendance transitive :
npm ls simple-git - 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. - 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
- Mettre à jour simple-git en 4.0.1 ou ultérieur, et régénérer le lockfile pour couvrir les dépendances transitives.
- Supprimer tout chemin par lequel une entrée externe atteint
SimpleGitOptions.configou un argument-c. Si une option est vraiment nécessaire, la choisir dans une liste fermée côté serveur, jamais la recopier. - 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.
- 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).
- 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.