Brotli2Shell : CVE-2026-111497, débordement dans le décodeur Brotli
Un débordement dans le décodeur Brotli (CVE-2026-111497, CVSS 9.2) touche toute application décompressant du Brotli non fiable. Correctifs : Brotli 1.2.1, Node.js 26.12.1/24.22.1/22.23.4.
Une faille dans le décodeur Brotli, surnommée « Brotli2Shell » (ou « Node2Shell »), expose toute application qui décompresse un flux Brotli contrôlé par un attaquant. L'identifiant est CVE-2026-111497, décrit dans l'avis GHSA-9v8h-qqgm-4m35. Google le note 9.2 (CVSS 4.0), critique ; le NVD n'avait pas encore publié sa propre évaluation au moment d'écrire ces lignes.
Ce que fait le bug
Le défaut est une écriture hors limites dans le décodeur Brotli (c/dec/decode.c), affectant Brotli 1.0.3 à 1.2.0. Un flux qui déclare un type de bloc puis en change n'était pas rejeté : le décodeur traite le flux comme incomplet et continue d'écrire dans un petit tampon fixe. L'écriture déborde sur l'état adjacent du décodeur, ce qui ouvre, selon l'avis, la modification de pointeurs internes, une primitive de lecture arbitraire et le détournement du flux d'exécution. La cause racine est une valeur de retour booléenne incapable de distinguer un flux incomplet d'un flux corrompu.
Ce qui est touché
Brotli est partout, souvent en dépendance transitive enfouie à plusieurs niveaux. Node.js embarque sa propre copie statique et l'utilise notamment dans son API fetch. Les paquets PyPI brotli et brotlicffi sont également concernés.
Silicon rappelle que les premiers signalements se concentraient sur Node.js et les applications HTTP. UnderNews relaie la recherche de JFrog : Ofri Ouzan, Security Researcher chez JFrog, a démontré une exécution de code à distance dans FFmpeg via un analyseur de fichier, preuve que le décodeur Brotli n'a pas besoin d'être appelé directement pour qu'un système soit vulnérable. JFrog a publié un scanner open source pour cartographier l'exposition, en notant qu'« une atténuation efficace exige plus qu'une simple vérification des versions de packages ».
Statut d'exploitation
Aucune exploitation active rapportée à ce stade. Des démonstrations partielles existent ; aucun PoC complet n'a été publié, et les PoC qui circulent visent des configurations délibérément affaiblies.
Que faire
- Mettez à jour Brotli en 1.2.1 (ou les rétroportages 1.1.1 / 1.0.10, et
brotlicffien 1.2.1.0). Le correctif ajoute un code d'erreur explicite et bloquant quand le flux est corrompu. - Pour Node.js, passez en 26.12.1, 24.22.1 ou 22.23.4 (correctifs du 21 octobre 2026). Node.js 20 et antérieur ne reçoivent pas de correctif — migrez vers une branche maintenue.
- Cartographiez vos dépendances transitives. La version de Brotli que vous exécutez n'est pas toujours celle que vous croyez : un composant tiers (FFmpeg, bibliothèque de parsing, binaire embarqué) peut réintroduire le décodeur vulnérable.
- Priorisez les chemins qui décompressent du contenu non fiable — réponses
fetch, corps de requêtes, fichiers téléversés — là où un attaquant fournit le flux.
Mise en contexte
Les écosystèmes ont patché vite : 7-zip, Bun, ClickHouse, Envoy, Firefox, Istio et Mozilla ont déjà intégré le correctif, Apache Arrow et DuckDB sont en cours. L'intérêt de ce cas tient moins à la gravité brute qu'à la surface de supply-chain : un correctif ajouté discrètement à l'amont google/brotli sans signalement de sévérité, une bibliothèque de compression omniprésente, et une exploitation qui ne suppose pas d'appel direct au décodeur. Vérifier un numéro de version en surface ne suffit pas quand la dépendance est transitive — c'est la leçon opérationnelle de Brotli2Shell.