Une faille de Node.js permet de pirater des applications avec de simples données compressées
Node.js a corrigé le 21 octobre cette faille de son décodeur Brotli, qu'Imperva a exploitée en test pour exécuter du code. Les versions à installer et les applications les plus exposées.

Le 22 octobre, Ron Masas, chercheur chez l'éditeur de sécurité Imperva, publie le récit d'une expérience simple à résumer. Il envoie à une application Node.js des données compressées au format Brotli, volontairement malformées, et l'application exécute le code qu'elles transportent. L'essai a réussi sur l'image officielle de Node.js 24.22.0 pour Linux. Sur la version suivante, 24.22.1, les mêmes données ont été rejetées.
La veille, le 21 octobre, le projet Node.js avait publié des mises à jour de sécurité pour ses trois branches maintenues : 22.23.4, 24.22.1 et 26.12.1. Elles corrigent dix failles, dont celle-ci, enregistrée sous la référence CVE-2026-111497 et classée de gravité « élevée » par Node.js. L'agence de cybersécurité de Singapour, qui a relayé l'alerte le 23 octobre, lui attribue la note de 9,8 sur 10. Au 23 octobre, aucune attaque réelle n'avait été signalée.
Un tampon de huit octets qui déborde
Brotli est un format de compression conçu par Google, très utilisé pour alléger les pages web. Node.js, l'environnement qui fait tourner du JavaScript sur un très grand nombre de serveurs, embarque une copie du décodeur Brotli. C'est lui qui est en cause.
D'après l'avis de Node.js, une instruction invalide dans le flux compressé n'était pas traitée comme une erreur : le décodeur croyait simplement attendre la suite des données. Il continuait donc d'ajouter les octets reçus dans un tampon interne de huit octets, jusqu'à écrire au-delà. Un attaquant capable de fournir des données Brotli qu'une application décompresse avec le module node:zlib peut ainsi corrompre la mémoire du programme. Selon Node.js, cela peut provoquer un plantage, la divulgation de la mémoire du processus ou l'exécution de code à distance.
L'avis attribue la découverte à l'équipe Codex Security d'OpenAI (Khai Tran et Sylvie Mayer). Imperva a baptisé la faille « Node2Shell ». Le nom rappelle PHP2Shell, la paire de failles critiques de PHP qui mobilise les administrateurs depuis le 21 octobre (voir notre article).
Quelles applications sont vraiment exposées ?
Toutes ne le sont pas. Un serveur HTTP Node.js nu ne décompresse pas de lui-même les données Brotli qu'il reçoit, souligne Imperva. Le risque apparaît quand l'application, ou une bibliothèque qu'elle utilise, décode des données venues de l'extérieur. Imperva a obtenu l'exécution de code dans deux situations :
- avec la fonction
fetch()de Node.js, quand elle reçoit une réponse compressée en Brotli envoyée par un serveur malveillant : c'est alors l'application cliente qui est visée ; - avec les requêtes entrantes décompressées par le framework Express (versions 5.0.0 à 5.3.0) ou par le module body-parser (versions 2.0.0 à 2.3.0), via les analyseurs
raw()etjson().
Imperva précise que l'exécution n'a pas réussi à chaque tentative et qu'elle n'a pas testé toutes les versions. Le défaut se trouve dans la bibliothèque Brotli elle-même, corrigée dans ses versions 1.0.10, 1.1.1 et 1.2.1 : d'autres logiciels qui l'intègrent pourraient donc devoir être mis à jour à leur tour. Le site Cyber Kendra cite notamment Bun, un concurrent de Node.js, corrigé dans sa version 1.4.4.
Que faire ?
Le correctif existe depuis quatre jours. La difficulté, comme souvent, consiste à trouver tous les endroits où Node.js est installé.
- Mettez à jour Node.js vers la version 22.23.4, 24.22.1 ou 26.12.1, ou une version plus récente. Mettre à jour les paquets npm ne suffit pas : c'est Node.js lui-même qu'il faut remplacer.
- Vérifiez la version réellement présente dans vos images de conteneurs, vos fonctions serverless, vos outils en ligne de commande, vos applications de bureau et vos machines d'intégration continue. Un inventaire de paquets peut passer à côté de ces copies, prévient Imperva.
- Quittez les versions qui ne sont plus maintenues : Node.js 20 et les versions antérieures ne recevront pas de correctif.
- En attendant, limitez les données Brotli venues de l'extérieur. Pour les requêtes entrantes, l'option
inflate: falsede body-parser refuse les corps compressés, rappelle le cabinet Rescana. Un pare-feu applicatif reste un palliatif : celui de Vercel, par exemple, ne couvre pas les réponses que vos fonctions vont chercher sur d'autres serveurs, selon Rescana.
La même mise à jour corrige aussi deux failles de gravité élevée qui permettent, dans certains cas, de faire valider par Node.js le certificat d'une autre adresse IP que celle contactée. Elle actualise en outre la liste des certificats de confiance, après la compromission d'une autorité intermédiaire d'eMudhra (lire notre article). Autant de raisons de ne pas repousser cette mise à jour. Reste à savoir quand un code d'attaque fiable circulera : c'est désormais une course entre lui et les mises à jour.
Méthode : veille assistée par intelligence artificielle, sources vérifiées, article relu et validé par Frédéric LENQUETTE. Notre charte éditoriale.
Partager cet article