CybersécuritéExplication
Faille de Brotli : des copies embarquées restent sans correctif
Une faille du décompresseur Brotli de Google, annoncée le 21 octobre avec ses versions corrigées, touche Node.js, Python et les logiciels qui en embarquent une copie. Le 26, 7-Zip-zstd, DuckDB ou EDK II attendaient toujours leur correctif.

En bref
- La faille CVE-2026-111497 est dans la bibliothèque Brotli de Google (versions 1.0.3 à 1.2.0), pas dans Node.js seul. Le correctif est dans le code public de Google depuis le 27 février 2026, mais les versions corrigées (1.0.10, 1.1.1, 1.2.1) et l’avis ne sont sortis que le 21 octobre : les projets qui avaient repris ce code entre-temps étaient protégés sans le savoir.
- Sont exposés les logiciels qui décompressent des données Brotli venues de l’extérieur : réponses de sites web, requêtes envoyées à un serveur, fichiers ouverts.
- Node.js, les paquets Python, .NET, Envoy et le module Perl sont corrigés ; Debian a corrigé son paquet brotli dans ses versions 12 et 13, pas dans sa version de test. Le 26 octobre au matin, 7-Zip-zstd, p7zip, DuckDB, Apache Arrow, EDK II et woff2 ne l’étaient pas.
- Imperva dit avoir exécuté du code à distance sur Node.js 24.22.0, sans publier son exploit ; aucune attaque n’avait été signalée au 22 octobre, selon le site de suivi Broccoli2Shell.
Les serveurs Node.js et les applications Python qui vont chercher des pages sur le Web ont reçu leur correctif ; d’autres logiciels qui transportent la même faille l’attendent encore, cinq jours après sa publication. La faute n’est pas dans Node.js, malgré le nom de « Node2Shell » donné d’abord à l’affaire : elle est dans Brotli, le format de compression créé par Google pour alléger les pages web, dont le code de référence a été recopié dans des dizaines de projets.
Une erreur de diagnostic, une écriture hors limites
Le bulletin de Node.js du 21 octobre décrit le mécanisme. Face à un flux compressé malformé, le décodeur prenait une erreur de format pour un simple manque de données, et continuait d’ajouter les octets reçus dans une mémoire tampon de huit octets. Il écrivait alors au-delà de cette zone : c’est une « écriture hors limites », qui peut, selon Node.js, provoquer un plantage, la fuite de données en mémoire ou l’exécution de code à distance. Le correctif de Google, intitulé « Detect and report invalid stream earlier », ajoute un code d’erreur dédié à ce cas. Il est daté du 27 février 2026 : la modification était publique depuis huit mois quand Google a sorti, le 21 octobre, les versions corrigées 1.0.10, 1.1.1 et 1.2.1, présentées comme réparant une faille.
Node.js crédite la découverte à « OpenAI Codex Security », l’outil d’audit de code d’OpenAI, en la personne de Khai Tran et Sylvie Mayer. La copie du bulletin reproduite le 22 octobre sur la liste oss-security remerciait encore Matteo Collina, mainteneur de Node.js, pour le signalement ; la page a été modifiée depuis, sans mention de la correction. La recherche de failles par des outils d’IA nourrit depuis des semaines un afflux de signalements sur cette liste.
La gravité varie selon qui la note. Google, autorité d’attribution de cette CVE (le numéro mondial d’une faille), lui donne 9,2 sur 10 dans la fiche du NVD, « critique » selon la grille CVSS (l’échelle de notation commune aux éditeurs) ; Node.js la classe « élevée », Microsoft 8,1 « élevée », et Ubuntu en priorité « moyenne ». Le chiffre à retenir est celui de Google, éditeur de la bibliothèque ; les autres notes reflètent surtout la façon dont chaque produit l’expose.
Une bibliothèque copiée plutôt que partagée
Pourquoi la correction se fait-elle projet par projet ? Parce que beaucoup de logiciels n’appellent pas la version de Brotli installée sur le système : ils en embarquent leur propre copie, figée à la version du jour où ils l’ont intégrée. Mettre à jour Brotli sur la machine ne corrige pas ces copies ; il faut une nouvelle version de chaque logiciel.
Sur oss-security, le 23 octobre, l’ingénieur Jan Schaumann a mis en garde ceux qui se diraient « je n’utilise pas Node.js, donc rien à craindre » : le défaut « se propage à tout utilisateur » de la bibliothèque, Envoy compris, et pourrait concerner OpenSSL quand il traite des certificats compressés, une hypothèse qu’il formule sans la démontrer. Le même jour, Michael Orlitzky lui a répondu que seuls ceux qui embarquent leurs dépendances sont touchés, et que Node.js sait utiliser la Brotli du système. Ubuntu le confirme à sa manière : ses paquets Node.js récents s’appuient sur la Brotli du système, dont la correction y était encore « à évaluer » le 25 octobre. Debian a corrigé son paquet brotli dans ses versions 12 (avis DLA-4855-1) et 13 (DSA-6582-1) et dans sa branche de développement, pas encore dans sa version de test (forky) ; son suivi marque toujours le paquet nodejs « vulnérable » : il s’appuie sur la Brotli du système, mais pourrait demander la définition d’une constante d’erreur, selon une note de l’équipe.
Alan Coopersmith (Oracle) a relevé le 25 octobre que certains projets s’étaient corrigés « sans le savoir », en reprenant le code de Google avant l’annonce, comme Ghostscript : la conséquence directe d’un correctif publié en février et signalé comme tel en octobre. Il renvoie au site Broccoli2Shell, tenu par des inconnus qui disent avoir seulement « enregistré un domaine nommé d’après un légume » : nous l’avons utilisé comme point de départ, chaque état cité ci-dessous ayant été vérifié sur le ticket ou le dépôt du projet le 26 octobre au matin.
Qui est exposé
La faille ne joue que si un programme décompresse des données Brotli fournies par quelqu’un d’autre. Imperva décrit deux cas pour Node.js : une réponse de site lue par la fonction fetch(), qui décompresse seule, et le corps d’une requête décompressé par le serveur web Express. En Python, la bibliothèque réseau requests décode les réponses Brotli dès que le paquet brotli ou brotlicffi est installé, selon sa documentation. Le site spécialisé OpenSourceMalware ajoute urllib3 et aiohttp dans les mêmes conditions, et httpx quand il est installé avec son option brotli ; tout service qui va chercher des pages qu’il ne contrôle pas (robot d’indexation, aperçu de liens, webhooks, ces notifications qu’un site envoie automatiquement à un autre) est concerné, selon lui.
.NET est moins exposé par défaut : Microsoft précise que la décompression automatique n’est activée par défaut ni dans ASP.NET Core ni dans HttpClient. Le relais réseau (proxy) Envoy n’est touché que si son filtre de décompression Brotli est configuré. Pour un logiciel d’archives comme 7-Zip-zstd, il suffit d’ouvrir un fichier .br piégé, selon le ticket ouvert le 23 octobre.
Le grand public a peu à faire : selon Broccoli2Shell, Chromium et Firefox avaient intégré le correctif avant l’annonce (nous ne l’avons pas vérifié dans leurs propres notes).
Exploitée ou non
Imperva dit avoir fait exécuter du code transmis dans des données Brotli par Node.js 24.22.0 pour Linux sur processeur ARM, sans débogueur ni programme modifié, sans publier l’exploit et en précisant que la démonstration « n’a pas réussi à chaque tentative ». Une preuve de concept publiée le 22 octobre ne provoquerait, sur une version normale, qu’un plantage et une lecture limitée de la mémoire, selon Broccoli2Shell, qui notait qu’aucune attaque n’avait été signalée à cette date. Ni Node.js, ni Google, ni Microsoft ne parlent d’exploitation dans leurs avis, et la faille ne figurait pas le 26 octobre au matin au catalogue des failles exploitées de l’agence américaine de cybersécurité (CISA).
Quoi mettre à jour
- Node.js : 22.23.4, 24.22.1 ou 26.12.1, puis redémarrer les processus et reconstruire les images de conteneur. Les branches en fin de vie (20, 23, 25) ne sont pas corrigées, selon Broccoli2Shell.
- Python :
pip install -U "Brotli>=1.2.1" "brotlicffi>=1.2.1.0"(versions du 22 octobre, avis GitHub). - .NET : moteur d’exécution 8.0.33, 9.0.22 ou 10.0.14 ; les applications autonomes et NativeAOT (compilées d’avance avec leur propre moteur) doivent être recompilées et redéployées, précise Microsoft.
- Bibliothèque C : Brotli 1.0.10, 1.1.1 ou 1.2.1 ; sur Debian 12 et 13, les paquets corrigés sont publiés (pas encore dans la version de test) ; sur Ubuntu, la correction n’était pas encore évaluée le 25 octobre.
- Perl : IO::Compress::Brotli 0.023, selon l’avis CPANSec.
- 7-Zip-zstd (Windows) et p7zip : pas de version corrigée le 26 octobre ; en attendant, ne pas ouvrir d’archive Brotli d’origine douteuse.
État des copies embarquées au 26 octobre (matin)
| Logiciel | Copie embarquée | État |
|---|---|---|
| 7-Zip-zstd | Brotli 1.2.0 | ticket n° 579 ouvert le 23 oct., sans réponse |
| p7zip (fork p7zip-project) | Brotli 1.0.9 | aucun ticket ni nouvelle version |
| DuckDB | Brotli 1.1.0 | correctif proposé le 23 oct., non fusionné |
| Apache Arrow (C++) | Brotli 1.0.9 | mise à jour proposée, une approbation le 24 oct., non fusionnée |
| EDK II (micrologiciel UEFI) | Brotli 1.2.0 | ticket n° 13378 ouvert, sans correctif lié |
| woff2 (polices web, compilation par Makefile) | code de 2018 | mise à jour proposée le 24 oct., non fusionnée |
| Node.js, paquets Python, .NET, Envoy | — | corrigés (21 au 25 oct.) |
EDK II est le code de base des micrologiciels UEFI, le logiciel qui démarre la plupart des PC avant le système d’exploitation ; Apache Arrow et DuckDB servent à l’analyse de données, où un fichier Parquet (un format courant de tableaux de données) compressé en Brotli peut venir d’un tiers. Pour ces projets, aucune date de version corrigée n’était annoncée lundi matin : leurs utilisateurs dépendent du rythme de chaque équipe, pour une faille que Google a réparée en une seule modification de code, publique depuis février.



