Retour au blog
Node.jsBrotliRCEfetchCVE-2026-111497

Node2Shell : la faille Brotli de Node.js (CVE-2026-111497) et neuf autres CVE corrigées le 21 octobre

Publié le 2026-10-22 · Mis à jour le 2026-10-246 min de lectureCleanIssue

> En bref : Le 21 octobre 2026, Node.js a publié v22.23.4, v24.22.1 et v26.12.1, qui corrigent dix CVE. La plus grave, CVE-2026-111497 (surnommée Node2Shell), est une écriture hors limites dans le décodeur Brotli embarqué. Une application qui décompresse des données Brotli contrôlées par un attaquant peut subir un plantage, une fuite de mémoire ou une exécution de code. Node.js 20 et versions antérieures ne recevront pas de correctif.

Le mécanisme

Selon l'avis de Node.js, un « block switch » invalide était traité comme un besoin temporaire de données au lieu d'une erreur de format. Le décodeur continuait alors d'ajouter des octets dans un tampon interne de huit octets. Google, qui maintient Brotli, attribue un score CVSS 4.0 de 9.2 et a publié Brotli 1.0.10, 1.1.1 et 1.2.1. Tout logiciel qui embarque une version vulnérable de Brotli est concerné, pas seulement Node.js.

Qui est exposé

Une application Node.js n'est exposée que si elle, ou une bibliothèque qu'elle utilise, décompresse des données Brotli venant d'un attaquant. Imperva a testé deux chemins :

  • les réponses récupérées : le fetch() natif de Node.js qui lit une réponse compressée en Brotli envoyée par un serveur hostile ;
  • les corps de requête reçus : Express 5.0.0 à 5.3.0 et body-parser 2.0.0 à 2.3.0, avec les parseurs raw() et json().
  • Mettre à jour Express ou body-parser ne suffit pas. La faille est dans le runtime : seule une version corrigée de Node.js la règle.

    Où en est l'exploitation

    Imperva a obtenu une exécution de code en laboratoire, après plusieurs tentatives. Une preuve de concept publique n'a atteint l'exécution de code que sur une version volontairement affaiblie. Au 23 octobre, aucune exploitation dans la nature n'est signalée et la CVE n'est pas au catalogue KEV de la CISA.

    Les autres correctifs à ne pas oublier

  • Trois failles hautes sur la validation TLS et DNS (CVE-2026-105482, 105483, 106069), qui concernent tout service qui ouvre des connexions TLS sortantes.
  • CVE-2026-106074 : crypto.randomUUID() et randomInt() peuvent répéter les mêmes valeurs dans les snapshots et les exécutables uniques. Ici, il faut reconstruire l'application, pas seulement mettre à jour.
  • Mises à jour de c-ares, OpenSSL, SQLite, Undici, et retrait de la confiance envers l'autorité intermédiaire eMudhra.
  • Ce qu'il faut faire maintenant

  • Mettez à jour Node.js vers 22.23.4, 24.22.1 ou 26.12.1, en priorité les services qui acceptent des corps compressés ou qui récupèrent des URL fournies par des utilisateurs.
  • En attendant, refusez les corps encodés là où ils ne servent à rien (option inflate: false de body-parser). Cette mesure ne couvre pas les réponses récupérées par fetch().
  • Ne comptez pas sur le WAF : il ne voit pas les réponses que votre service va chercher lui-même.
  • Ce que ça change pour un agent IA

    Un agent avec un outil « lire une page web » fait exactement ce que décrit le premier chemin : il appelle fetch() vers une URL qu'il n'a pas choisie seul. Une injection de prompt peut l'envoyer vers un serveur hostile qui répond en Brotli piégé. Le serveur MCP ou le backend d'agent en Node.js devient alors la cible.

    Vous éditez un logiciel ? CleanIssue réalise des audits de sécurité pour votre produit en conditions réelles, sans accès au code. Pour une première lecture de votre exposition, commencez par une revue externe de votre application.

    Besoin de savoir ce que votre agent IA peut faire ?

    Expliquez votre agent, ses tools et votre contexte client. Nous revenons vers vous avec le bon niveau de revue.

    Parler de votre audit