🔍 Contexte
Publié le 8 avril 2026 par Bobby Gould et Michael DePlante sur le blog de la Zero Day Initiative (ZDI), cet article détaille une vulnérabilité structurelle dans la résolution de modules Node.js sur Windows, initialement signalée en septembre 2024 par un chercheur anonyme.
⚙️ Cause racine
Lorsqu’une application Node.js appelle require('bar'), le runtime parcourt une liste de chemins jusqu’à atteindre C:\node_modules. Sur Windows, tout utilisateur peu privilégié peut créer ce répertoire et y déposer un module malveillant. Si la dépendance légitime est absente (optionnelle, supprimée en production, ou non installée), Node.js charge et exécute le fichier malveillant dans le contexte de l’utilisateur courant.
Node.js considère ce comportement comme intentionnel (CWE-427 non traité comme vulnérabilité) avec la position : “Node.js trusts the file system.”
🎯 Cas d’exploitation documentés
Cas 1 — npm CLI (CVE-2026-0775 / ZDI-26-043 / ZDI-CAN-25430)
- Avant la version 11.2.0, npm CLI utilisait la bibliothèque
promise-inflightavec une dépendance optionnelle surbluebird, non incluse dans l’installation standard de Node.js. - La suppression de
bluebirdvia une pull request (github.com/npm/cli/pull/1438) a créé involontairement cette surface d’attaque. - Les commandes
npm install,npm -l,npm prunedéclenchent toutes le chargement du module malveillantC:\node_modules\bluebird.js.
Cas 2 — Discord (CVE-2026-0776 / ZDI-26-040 / ZDI-CAN-27057) — NON CORRIGÉ
- Signalé le 22 avril 2025 par T. Doğa Gelişli.
- Discord utilise la bibliothèque
ws(WebSocket) qui contient une dépendance optionnelle surutf-8-validate, non embarquée dans Discord. - À chaque lancement de Discord,
C:\node_modules\utf-8-validate.jscontrôlé par l’attaquant est exécuté. - Discord se lance automatiquement à la connexion Windows, rendant l’exécution de code immédiate et sans interaction utilisateur.
🌐 Périmètre élargi
D’autres applications sont mentionnées comme affectées : MongoDB Compass, MongoDB Shell, ainsi que tout projet utilisant Electron, Next.js ou React sur Windows avec des dépendances manquantes.
🚫 Positions des éditeurs
- Node.js : comportement intentionnel, non-vulnérabilité.
- npm : les exploits nécessitant un accès local sont inéligibles.
- Discord : les attaques physiques/locales ne sont pas considérées comme des problèmes de sécurité.
📄 Nature de l’article
Il s’agit d’une publication de recherche technique de ZDI visant à documenter et exposer publiquement une classe de vulnérabilités d’escalade de privilèges locaux affectant l’écosystème Node.js sur Windows, avec des preuves de concept sur des applications réelles.
🧠 TTPs et IOCs détectés
TTP
- T1574.008 — Hijack Execution Flow: Path Interception by Search Order Hijacking (Persistence)
- T1574 — Hijack Execution Flow (Privilege Escalation)
- T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
IOC
- CVEs :
CVE-2026-0775— NVD · CIRCL - CVEs :
CVE-2026-0776— NVD · CIRCL - Fichiers :
bluebird.js - Fichiers :
utf-8-validate.js - Chemins :
C:\node_modules\bluebird.js - Chemins :
C:\node_modules\utf-8-validate.js - Chemins :
C:\node_modules
🔗 Source originale : https://www.zerodayinitiative.com/blog/2026/4/8/nodejs-trust-falls-dangerous-module-resolution-on-windows