Brotli2Shell: RCE du décodeur Brotli (CVE-2026-111497)
Le décodeur Brotli, embarqué dans Node.js, .NET et Python, permet l'exécution de code par données compressées. Exploitation active; échéance CISA: 10 novembre.
Qui est touché
- Node.js 22.x avant 22.23.4, 24.x avant 24.22.1, 26.x avant 26.12.1; les lignes 20.x, 23.x et 25.x, en fin de vie, ne recevront pas de correctif
- Moteurs de réservation et portails clients développés sur Express 5 (5.0.0 à 5.3.0) ou body-parser 2.0.0 à 2.3.0, qui décompressent les corps de requête Brotli automatiquement
- .NET, PowerShell et Visual Studio (avis Microsoft du 25 octobre), clients HTTP Python brotli et brotlicffi, Bun, Envoy Proxy, Istio, PHP pour Windows
- SaaS hôteliers embarquant Node.js ou la bibliothèque Brotli: moteurs de réservation, chatbots, channel managers, passerelles d'intégration
Comment corriger
Mettre Node.js à jour vers 22.23.4, 24.22.1 ou 26.12.1 et reconstruire les images de conteneurs: la preuve d'exploitation de Imperva fonctionne sur l'image officielle Node.js 24.22.0 sans aucune modification. Mettre à jour .NET et PowerShell selon l'avis Microsoft du 25 octobre, et les paquets Python brotli (1.0.10, 1.1.1 ou 1.2.1) et brotlicffi. Interroger par écrit chaque éditeur SaaS (moteur de réservation, chatbot, channel manager) sur la version exacte du runtime déployé. En attendant un correctif, bloquer ou désactiver Content-Encoding: br en amont sur les points d'entrée clients (WAF, CDN, reverse proxy).
Ce qui se passe
CVE-2026-111497 est une écriture hors limites dans le décodeur C de Brotli, la bibliothèque de compression de Google embarquée par Node.js, .NET, et bien d'autres. Un flux Brotli construit pour l'occasion corrompt la mémoire du décodeur: plantage, fuite de contenu mémoire, ou exécution de code à distance. Le projet Node.js a publié les correctifs le 21 octobre; Google, en tant que CNA, note la faille 9,2 en CVSS v4.0 et le NVD 9,8 en CVSS 3.1. La CISA l'a ajoutée au catalogue KEV le 27 octobre, avec une échéance de correction au 10 novembre.
Imperva Red Team a démontré l'exécution de code sur l'image officielle Node.js 24.22.0, sans débogueur ni build modifié, via deux chemins: une réponse compressée consommée par le fetch() natif, et un corps de requête entrant décompressé par Express ou body-parser. La même entrée est rejetée par la version corrigée 24.22.1. L'éditeur ELLIO a observé du trafic d'exploitation les 25 et 26 octobre; ces tentatives ont planté le processus cible sans atteindre l'exécution de code, ce que les chercheurs qualifient de première génération.
Pourquoi c'est grave pour un hôtel
Le parc web de l'hôtellerie est massivement Node.js: moteurs de réservation, portails de clients, chatbots, passerelles d'intégration. Et Express 5 décompresse les corps de requête Brotli par défaut: la porte d'entrée ne demande pas à l'attaquant de passer par une vulnérabilité applicative, il lui suffit d'envoyer une requête. Le chemin sortant est plus pernicieux encore: un service qui appelle une API tierce avec fetch() natif décode la réponse compressée de ce tiers. Une plateforme partenaire compromise devient un vecteur.
Qui est touché
- Node.js antérieur à 22.23.4, 24.22.1 ou 26.12.1, y compris les images conteneurs officielles non reconstruites. Les lignes 20.x, 23.x et 25.x sont en fin de vie et sans correctif.
- Toute application décompressant des données Brotli contrôlables par un tiers: .NET et PowerShell (correctifs Microsoft du 25 octobre), clients Python brotli et brotlicffi, Bun, Envoy Proxy, Istio, PHP pour Windows.
- Chaque logiciel qui embarque sa propre copie de Brotli doit publier son propre correctif: les SaaS hôteliers sont concernés au cas par cas.
Comment corriger
- Mettre à jour Node.js vers 22.23.4, 24.22.1 ou 26.12.1, puis reconstruire les images conteneurs et redéployer.
- Mettre à jour .NET, PowerShell et Visual Studio selon l'avis Microsoft du 25 octobre.
- Mettre à jour les paquets Python brotli (1.0.10, 1.1.1 ou 1.2.1) et brotlicffi.
- Écrire à chaque éditeur SaaS (moteur de réservation, chatbot, channel manager) et demander la version exacte du runtime; consigner la réponse.
- En attendant: désactiver ou filtrer Content-Encoding: br sur les points d'entrée clients au niveau WAF, CDN ou reverse proxy.
Contexte
Le correctif du décodeur Brotli a été commité le 27 février 2026 sans publication ni advisory, et est resté lisible publiquement pendant huit mois avant les sorties de la semaine du 20 octobre. Les nommages concurrents (Node2Shell, HTTP2Shell, Broccoli2Shell) désignent tous la même faille; le seul dénominateur commun est le décodeur Brotli lui-même, d'où le nom retenu ici.