Faille Brotli HTTP2Shell : corrigée en février sans alerte, elle impose une vague de patchs
Une seule bibliothèque de compression, et une bonne partie de la pile web à mettre à jour. La faille CVE-2026-111497, surnommée Node2Shell puis HTTP2Shell, touche le décodeur de Brotli, l’algorithme de compression de Google utilisé partout sur le web. Le correctif existait dans le code source depuis février, sans avoir été identifié comme un correctif de sécurité. Les versions corrigées ne sont sorties que le 21 octobre, et les correctifs d’urgence se sont enchaînés jusqu’à ce week-end.

Selon la fiche CVE publiée par Google, il s’agit d’une écriture hors limites dans le fichier c/dec/decode.c, présente dans les versions 1.0.3 à 1.2.0 de Brotli, sur toutes les plateformes. Un flux compressé piégé permet à un attaquant distant, sans authentification, de corrompre la mémoire du décodeur, de lire des données sensibles, de faire planter le processus et potentiellement d’exécuter du code. Score CVSS 4.0 : 9,2 sur 10, niveau critique. Red Hat, plus prudent, la classe « Important » et souligne que l’exploitation exige un flux malformé très précis.
À lire aussi : ChatGPT Work lance un Data agent : dashboards et insights sans écrire une requête
Le mécanisme est décrit dans le bulletin de sécurité de Node.js du 21 octobre. Face à un changement de bloc invalide, le décodeur répondait qu’il lui fallait « plus de données » au lieu de signaler une erreur de format. Il continuait donc d’ajouter des octets dans un tampon interne de huit octets, jusqu’à déborder. Le correctif amont (commit 0ed4268) introduit un code d’erreur dédié, BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH, et stoppe net le décodage.
Un correctif de février resté sans version
La faille a été trouvée par l’équipe Codex Security d’OpenAI : Node.js crédite Khai Tran et Sylvie Mayer. Selon OpenAI, elle a été découverte en février. La cause avait été corrigée dans le code de Brotli dès cette époque, mais personne n’avait mesuré sa portée et aucune version publiée ne l’embarquait. Une chronologie compilée par Bugsink date ce commit du 27 février, présenté comme un simple travail de correction du décodeur. Chromium l’a intégré le 23 mars, Firefox en avril. Les navigateurs à jour ne sont donc pas en première ligne.
Le problème vient de tous les autres logiciels qui embarquent leur propre copie de Brotli. Node.js a publié les versions 22.23.4, 24.22.1 et 26.12.1 le 21 octobre, quelques heures avant que Google ne mette en ligne Brotli 1.0.10, 1.1.1 et 1.2.1. Dès le lendemain, Imperva a exécuté du code sur l’image Docker officielle de Node.js 24.22.0 pour Linux arm64, d’après Sysdig. Aucune exploitation dans la nature n’avait été confirmée au 23 octobre.
L’attaque fonctionne dans les deux sens. Un client malveillant peut viser un serveur qui décompresse les requêtes, et un serveur malveillant peut viser un client qui décompresse les réponses, y compris un simple curl --compressed. Retirer br de l’en-tête Accept-Encoding ne suffit pas : un serveur hostile peut envoyer du Brotli quand même.
Des rustines jusqu’à dimanche, Ubuntu encore en attente
Les correctifs ont suivi en cascade. Bun 1.4.4 le 23 octobre, les paquets Python Brotli 1.2.1 et brotlicffi 1.2.1.0, Envoy et Istio. Dimanche 25 octobre, Microsoft a publié des mises à jour hors calendrier pour .NET : 8.0.33, 9.0.22, 10.0.14 et .NET 11 RC3. Le .NET Framework n’est pas touché, et la décompression automatique des requêtes et des réponses n’est pas activée par défaut. Le même jour, Cloudflare a déployé deux règles WAF d’urgence, l’une sur les corps de requête encodés en Brotli, l’autre sur le point d’accès /_next/image de Next.js. Les deux se contentent de journaliser par défaut.
Côté Linux, Red Hat a publié son bulletin RHSB-2026-015 ce lundi 26 octobre : RHEL 7, 8, 9 et 10 sont concernés, et Firefox, Thunderbird et Node.js figurent dans la liste des logiciels exposés. Selon le suivi tenu à jour ce lundi par Aikido, Debian 12 et 13, Alpine et Amazon Linux 2023 ont déjà un paquet corrigé. Ubuntu et SUSE n’en avaient pas encore. Apache n’est pas concerné dans sa configuration standard, son module mod_brotli ne faisant que compresser.
Pour un développeur ou un admin, la consigne tient en une ligne : mettre à jour Node.js, Bun, Python, .NET ou la bibliothèque système, puis reconstruire les images de conteneurs et les binaires autonomes, qui gardent leur propre copie du décodeur. Entre le commit discret de février et les versions publiées le 21 octobre, près de huit mois se sont écoulés. C’est ce délai, plus que le bug lui-même, qui donne sa gravité à l’affaire.
Thomas Duvillard Site web de Thomas Duvillard
Thomas Duvillard est rédacteur en chef de Geek Actu. Il couvre les jeux vidéo, le high-tech et la pop culture, tests et analyses à l’appui.