
HTTP2Shell (CVE-2026-111497), également connue sous les noms de Brotli2Shell, Broccoli2Shell et Node2Shell, est une vulnérabilité de corruption de mémoire affectant le décodeur de la bibliothèque Brotli de Google, c’est-à-dire le composant chargé de décompresser les données. Brotli est un format de compression largement utilisé sur le Web. Son décodeur est donc intégré à de nombreux logiciels auxquels on ne pense pas nécessairement.
Pour exploiter cette vulnérabilité, un attaquant doit amener une application à décompresser des données Brotli qu’il contrôle. Il peut s’agir d’une requête compressée envoyée à un serveur ou d’une réponse compressée renvoyée à un client qui la décompresse automatiquement. Une exploitation réussie pourrait permettre à un attaquant de provoquer le plantage d’une application, de lire le contenu de sa mémoire ou, dans le pire des cas, d’exécuter du code.
Des chercheurs ont démontré la possibilité d’exécuter du code sur des versions officielles de Node.js (24.22.0), mais cela a nécessité des tentatives répétées, spécifiquement adaptées à cette version. Des preuves de concept publiques sont disponibles sur GitHub.
Le 26 octobre, l’entreprise spécialisée dans le renseignement sur les menaces ELLIO a signalé des tentatives d’exploitation visant Node.js observées dans la nature. Le 27 octobre, la CISA a ajouté cette vulnérabilité à son catalogue des vulnérabilités exploitées connues (Known Exploited Vulnerabilities, KEV). Selon les données de télémétrie d’Akamai, 61 % des réseaux utilisent des versions vulnérables de Node.js.
Cette faille se cache au sein d’autres logiciels. De nombreuses équipes ne trouveront pas Brotli dans leur inventaire des actifs informatiques, car la bibliothèque est intégrée à un environnement d’exécution ou à une autre bibliothèque logicielle. Les versions officielles de Node.js et de Bun embarquent leur propre copie de Brotli. Par conséquent, la mise à jour du paquet Brotli du système d’exploitation ne suffit pas à les corriger.
Une mise à jour ne s’applique pas non plus au code déjà en cours d’exécution, car le correctif ne prend effet qu’après un redémarrage, ou après la reconstruction et le redéploiement de l’application ou de l’image de conteneur.
La première étape consiste à identifier les logiciels dans lesquels se trouve le décodeur. Des versions corrigées sont disponibles pour Brotli lui-même, Node.js, .NET, Bun, Envoy Proxy, Istio, les paquets Brotli pour Python et PHP pour Windows. Les branches de Node.js arrivées en fin de support, notamment les versions 20, 23 et 25, ne recevront pas de correctif de la part du projet Node.js. Pour les systèmes concernés, celui-ci recommande de migrer vers une version encore prise en charge.
Quand une mise à jour ne peut pas être déployée immédiatement, le rejet des requêtes compressées avec Brotli avant toute décompression permet de bloquer l’une des voies d’attaque. Cette mesure ne protège toutefois pas les applications qui récupèrent des réponses compressées avec Brotli depuis des serveurs qu’elles ne contrôlent pas.
Le projet Node.js ne propose pas de mesure de contournement équivalente pour son API fetch intégrée. Il est donc nécessaire d’installer une version corrigée de Node.js.