HTTP2Shell : la faille Brotli touche Python, Bun et Envoy
CVE-2026-111497, la faille du décodeur Brotli désormais appelée HTTP2Shell, obtient un score de 9,2 et touche les piles requests et httpx de Python, Bun, Envoy et Istio.
4 min de lecture

En chiffres
- CVSS v4.0 score, rated critical
- 9.2
- Brotli versions with the bug
- 1.0.3-1.2.0
- monthly downloads of Python's Brotli package
- 82.8M
Un bug mémoire dans le décompresseur Brotli de Google porte désormais un nom plus accrocheur et a une portée plus large. Corrigée d'abord dans Node.js le 21 octobre 2026 sous le nom de « Node2Shell », la faille CVE-2026-111497 est appelée « HTTP2Shell » depuis la fin de la journée du 23 octobre (UTC). Le nouveau nom reflète l'étendue de sa propagation : des bibliothèques HTTP de Python, le runtime Bun et les proxys Envoy et Istio embarquent tous du code concerné.
L'entreprise de sécurité Aikido lui attribue un score de 9,2 sur 10 (critique) selon CVSS v4.0, l'échelle de gravité standard. Brotli est un format de compression que les serveurs web et les navigateurs utilisent pour réduire la taille des données. Tout programme qui décompresse des données Brotli venant d'un inconnu peut être exposé.
Un bug, deux noms
HTTP2Shell n'est pas une deuxième faille. « Il s'agit d'une seule CVE, pas d'une deuxième faille », écrit Brandefense, une société de renseignement sur les menaces, dans son suivi. C'est le même bug du décodeur Brotli sous une nouvelle étiquette.
Tech AI Wire a couvert la première série de correctifs dans la mise à jour de sécurité d'octobre de Node.js. Depuis, c'est la liste des projets concernés qui a changé.
Comment fonctionne le bug
La faille se trouve dans les versions 1.0.3 à 1.2.0 de Brotli. L'avis de sécurité de Node.js l'explique. Un « block switch » invalide dans un flux compressé était traité comme un besoin temporaire de données supplémentaires, au lieu d'une erreur de format. Le décodeur continuait alors d'écrire dans un tampon interne de huit octets, au-delà de sa fin.
Écrire au-delà d'un tampon peut faire planter un programme, divulguer de la mémoire ou, dans le pire des cas, permettre à un attaquant d'exécuter du code. Les notes de version de Brotli elles-mêmes indiquent que « l'écriture hors limites permet l'exécution de code à distance ».
L'avis de Node.js attribue le signalement à OpenAI Codex Security, l'outil automatisé de revue de code d'OpenAI. Selon Aikido, OpenAI a découvert que le bug fonctionne dans les deux sens. Un client malveillant peut attaquer un serveur non corrigé, et un serveur malveillant peut attaquer un client non corrigé.
Aikido ajoute que la cause profonde avait été corrigée dans le code source de Brotli en février. Personne ne l'a signalée comme un correctif de sécurité, si bien qu'aucune version ne l'a intégrée avant le 21 octobre.
Pourquoi les applications Python sont exposées
De nombreuses applications Python utilisent Brotli sans jamais l'importer. Selon Aikido, urllib3 et requests, httpx, aiohttp et Scrapy utilisent tous Brotli automatiquement lorsqu'il est installé. Le paquet Brotli de Python est téléchargé 82,8 millions de fois par mois.
Il y a un second piège. Au 23 octobre, ni la fiche CVE, ni la base de données OSV, ni la base d'avis de sécurité de GitHub ne reliaient la CVE à l'un ou l'autre des paquets Python, rapporte Aikido. pip-audit, Dependabot et Safety ne signaleraient donc pas une version vulnérable.
Versions corrigées
| Projet | Corrigé dans |
|---|---|
| Google Brotli (bibliothèque C) | 1.0.10, 1.1.1, 1.2.1 |
| Brotli sur PyPI | 1.2.1 |
| brotlicffi sur PyPI | 1.2.1.0 |
| Node.js | 22.23.4, 24.22.1, 26.12.1 |
| Bun | 1.4.4 |
| Envoy | 1.40.0, 1.39.3, 1.38.6, 1.37.8 |
| Istio | 1.29.9, 1.30.6, 1.31.2 |
Certaines versions n'ont pas de correctif. Node.js 20.x, 25.x et 18.x ont dépassé leur fin de vie, et Brandefense cite Vercel, selon qui Node 20 « ne recevra pas ce correctif ». Brandefense indique aussi que les paquets Brotli plus récents de Debian n'ont pas encore de version corrigée. Selon Aikido, mod_brotli d'Apache et Nginx ne décodent pas Brotli par défaut.
Est-elle exploitée ?
Aucune attaque réelle n'avait été signalée à 22 h 00 UTC le 23 octobre, selon Brandefense. La faille ne figure pas sur la liste des vulnérabilités exploitées connues de la CISA.
Sa gravité réelle reste discutée. Le chercheur Ron Masas affirme que son équipe a reproduit une exécution de code à distance sans authentification. Brandefense note que le code de preuve de concept publié provoque surtout des plantages, et une analyse soutient que seul un déni de service est possible.
Ce que cela signifie pour les développeurs
Appliquez d'abord le correctif, puis vérifiez vos fichiers de verrouillage à la main. Comme les scanners risquent de ne pas signaler les paquets Python, cherchez Brotli et brotlicffi dans vos listes de dépendances et passez à la version 1.2.1 ou 1.2.1.0.
Ne partez pas du principe que seul un serveur est visé. Si votre code récupère des données sur des serveurs externes avec requests, httpx ou aiohttp, un serveur hostile peut envoyer le flux piégé. Aikido prévient que « modifier Accept-Encoding seul ne suffit pas », car cet en-tête demande seulement au serveur de ne pas compresser.
Sous Node.js, vérifiez ce que votre framework décode. D'après la lecture de Brandefense, Express 5 décode par défaut les corps de requête compressés en Brotli, ce que ne fait pas Express 4. Masas résume le risque sans détour : « app.use(express.json()) suffit. »
Si vous utilisez Envoy ou Istio comme service mesh, mettez aussi à jour les proxys. Tout ce qui embarque sa propre copie de Brotli doit être recompilé, une simple mise à jour du système ne suffit pas. Là où aucun correctif n'existe encore, Aikido recommande de désactiver le décodage Brotli.
Plus tôt cette semaine, une autre faille PHP, PHP2Shell, a fait l'objet de tentatives d'attaque avant sa divulgation. Traitez celle-ci avec la même rapidité.
Sources
- Node2Shell Brotli vuln (CVE-2026-111497) evolves to HTTP2Shell, as libraries and apps using HTTP are affected - Aikido Security
- Node2Shell: Fixed Node.js Versions and Check - Brandefense
- Wednesday, October 21, 2026 Security Releases - Node.js
- google/brotli releases - GitHub (google/brotli)
Articles liés

Python 3.15.1, 3.14.9 et 3.13.17 livrent pip 26.2.2
Python 3.15.1, 3.14.9 et 3.13.17 sont sortis le 21 octobre 2026. Ils intègrent pip 26.2.2 et certifi 2026.10.19 pour ne plus faire confiance à l'autorité eMudhra.

Rejetto HFS CVE-2026-61500 exploitée un jour après la publication de son analyse
HFS 3.0.0 à 3.2.0 signe les connexions avec Math.random(), une faille trouvée par Mythos d'Anthropic. Les attaques ont commencé le 3 octobre, un jour après l'analyse. La 3.2.1 la corrige.

Python 3.10 arrive en fin de vie, cinq versions corrigent 8 CVE
Python 3.10.22 est la dernière version de la branche 3.10 : elle a atteint sa fin de vie le 1er octobre 2026, tandis que 3.11 à 3.14 recevaient des correctifs pour jusqu'à huit CVE.