HTTP2Shell (CVE-2026-111497) : la faille critique du décodeur Brotli et comment vous protéger
HTTP2Shell, la faille critique de Brotli : ce qu’elle touche (Node.js, Python, Bun, Envoy, .NET), les versions corrigées et comment vous protéger.

En bref: HTTP2Shell (CVE-2026-111497) est une faille critique du décodeur Brotli, utilisé par Node.js, Python, Bun, Envoy, .NET et de nombreux autres programmes. Des données compressées spécialement préparées peuvent corrompre la mémoire et, dans certaines conditions, permettre l’exécution de code à distance. Le correctif existe : Node.js 22.23.4, 24.22.1 ou 26.12.1 et Brotli 1.0.10, 1.1.1 ou 1.2.1. Mettez à jour, puis redémarrez vos applications.
Qu’est-ce que HTTP2Shell ?
Le 21 octobre 2026, le projet Node.js a publié des mises à jour de sécurité pour les versions 22, 24 et 26. L’un des problèmes corrigés, CVE-2026-111497, ne se trouve pas dans Node.js lui-même, mais dans Brotli, l’algorithme de compression créé par Google et très utilisé sur le web sous l’encodage br.
La faille porte plusieurs noms : HTTP2Shell, Node2Shell et Broccoli2Shell. Il s’agit toujours du même bug. Le nom « HTTP2Shell » est trompeur : la faille n’a rien à voir avec le protocole HTTP/2. Tout programme qui décompresse des données Brotli provenant de sources non fiables peut être touché.
La faille a été découverte par Khai Tran et Sylvie Mayer (OpenAI Codex Security). L’équipe d’Imperva a montré qu’elle permet d’exécuter du code sur une version vulnérable de Node.js.
Comment fonctionne la faille
Les données Brotli sont découpées en blocs, et le décodeur passe d’un bloc à l’autre selon des instructions contenues dans le flux compressé. Quand une telle instruction est invalide, le décodeur vulnérable ne la traite pas comme une erreur. Il l’interprète comme une demande de données supplémentaires et continue d’écrire des octets dans un tampon de seulement 8 octets, au-delà de sa limite.
Ce type de bug s’appelle une écriture hors limites (out-of-bounds write). Conséquences possibles, par ordre de gravité :
- plantage du processus : l’application tombe et le site ou le service devient indisponible ;
- fuites de mémoire : un attaquant peut lire des données dans la mémoire du processus ;
- exécution de code à distance : un attaquant exécute ses propres commandes avec les droits de l’application.
L’attaquant n’a besoin ni de compte ni de mot de passe. Il lui suffit que l’application décompresse ses données.
Quelle est la gravité ?
Les notes varient selon les sources. L’autorité qui a attribué la CVE l’évalue à 9,2 sur 10 (critique) en CVSS 4.0. Node.js la classe en gravité élevée et Red Hat en importante. Ce qui est établi au 26 octobre 2026 :
- du code de démonstration public existe ;
- l’exécution de code a été démontrée sur Node.js non corrigé, mais les résultats varient d’un système à l’autre ;
- aucune attaque réelle n’a encore été signalée, et la faille ne figure pas dans le catalogue CISA des vulnérabilités activement exploitées.
Quand du code public est disponible, les attaques réelles suivent en général rapidement. Traitez la mise à jour comme une urgence.
Qui est concerné ?
La bibliothèque Brotli
Les versions 1.0.3 à 1.2.0 sont vulnérables. Le correctif se trouve dans 1.0.10, 1.1.1 et 1.2.1. Les distributions Linux appliquent souvent les correctifs sans changer le numéro de version : vérifiez donc l’avis de sécurité de votre distribution, pas seulement le numéro.
Programmes et langages concernés
| Programme | Versions corrigées |
|---|---|
| Node.js | 22.23.4, 24.22.1, 26.12.1 (18, 20, 23 et 25 ne reçoivent plus de correctifs) |
| Bun | 1.4.4 |
| Python: Brotli, brotlicffi | Brotli 1.2.1, brotlicffi 1.2.1.0 |
| Envoy Proxy | 1.36.12, 1.37.8, 1.38.6, 1.39.3, 1.40.0 |
| Istio | 1.29.9, 1.30.6, 1.31.2 |
| Go: andybalholm/brotli | v1.2.7 |
| Ruby: brotli gem | 0.9.1 |
| PHP: brotli extension | 0.21.1 |
| .NET | mises à jour Microsoft du 25 octobre 2026 |
PHP a également reconstruit les paquets Windows officiels des versions 8.2 à 8.5, car ils incluent la bibliothèque Brotli.
Programmes avec leur propre copie de Brotli
De nombreux programmes embarquent leur propre copie du décodeur. Elle n’est pas corrigée lorsque vous mettez à jour la bibliothèque système, mais seulement avec une nouvelle version du programme. Parmi ceux signalés : ClickHouse, DuckDB, Apache Arrow (pyarrow), 7-Zip-zstd, p7zip, FFmpeg via libjxl (images JPEG XL) et les outils pour polices WOFF2. Pour certains, aucune version officielle corrigée n’était disponible le 25 octobre.
Comment une attaque peut vous atteindre
- Requêtes reçues par le serveur : un attaquant envoie une requête avec
Content-Encoding: br, et l’application décompresse automatiquement le contenu, par exemple via un middleware dans Express ou ASP.NET Core. - Réponses téléchargées par l’application : votre application demande une page ou une API à un autre serveur, qui répond avec des données Brotli piégées.
fetch()dans Node.js et les clients Python requests, HTTPX, aiohttp et urllib3 décompressent automatiquement les réponses Brotli lorsque la prise en charge est installée. - Fichiers téléversés : images JPEG XL, fichiers Parquet, archives ou polices WOFF2 contenant des données Brotli.
Le deuxième scénario est le plus facile à négliger : même si votre serveur ne reçoit jamais de données Brotli, une application qui télécharge des ressources externes est exposée.
Vérifiez si vous êtes concerné
Version de Node.js (sur le serveur, dans chaque conteneur et dans chaque application sous « Setup Node.js App » si vous utilisez cPanel) :
node -vPaquets Python (dans chaque environnement virtuel) :
pip show brotli brotlicffiBibliothèque système :
# Debian / Ubuntu
dpkg -l | grep -i brotli
# AlmaLinux / Rocky / CloudLinux / RHEL
rpm -qa | grep -i brotliProcessus qui ont chargé la bibliothèque système et doivent être redémarrés après la mise à jour :
sudo grep -l brotlidec /proc/*/maps 2>/dev/nullBun :
bun --versionLes images Docker embarquent leur propre version de Node.js. Vérifiez chaque image, par exemple ainsi (remplacez IMAGE par le nom de votre image) :
docker run --rm IMAGE node -vComment vous protéger
1. Mettez à jour
- Node.js : passez à 22.23.4, 24.22.1 ou 26.12.1 ou plus récent. Si vous utilisez Node.js 18 ou 20, migrez l’application vers 22 ou 24, car ces versions ne reçoivent plus de correctifs.
- Python : exécutez
pip install -U brotli brotlicffidans chaque environnement qui contient ces paquets. - Système d’exploitation : installez les mises à jour de sécurité (
apt upgradeoudnf upgrade) dès que votre distribution publie le paquet corrigé. - Bun, Envoy, Istio, .NET : les versions du tableau ci-dessus.
pip install -U brotli brotlicffi2. Redémarrez et reconstruisez
Un processus lancé avant la mise à jour continue d’exécuter l’ancien code. Redémarrez les applications Node.js (par exemple avec pm2 reload all ou depuis cPanel), les services Python et tout processus trouvé par la commande ci-dessus. Reconstruisez les images Docker sur une image de base corrigée et vérifiez après le démarrage que la nouvelle version tourne.
3. Mesures temporaires
Si vous ne pouvez pas mettre à jour tout de suite, bloquez les requêtes entrantes compressées avec Brotli. Les navigateurs n’envoient pas de requêtes compressées en Brotli, les visiteurs habituels ne remarquent donc rien. Vérifiez toutefois si des intégrations (API, applications) envoient de telles requêtes.
Dans nginx, dans le bloc server :
if ($http_content_encoding ~* "br") {
return 415;
}Dans Apache (.htaccess) :
RewriteEngine On
RewriteCond %{HTTP:Content-Encoding} br [NC]
RewriteRule ^ - [R=415,L]Cloudflare a publié le 25 octobre une règle WAF d’urgence pour cette faille, et Azure, Imperva et Vercel ont des règles similaires. En Python, vous pouvez désinstaller temporairement les paquets brotli et brotlicffi ; sans eux, les clients HTTP ne décompressent plus de données Brotli.
Conseil: Ces mesures ne protègent que les données qui arrivent au serveur. Elles ne protègent pas les applications qui téléchargent des ressources d’autres sites. Seule la mise à jour protège complètement.
4. Surveillez les signes d’une attaque
- plantages inattendus d’applications Node.js ou Python (erreurs de type
segmentation fault) ; - requêtes avec
Content-Encoding: brdans les journaux du serveur web ; - nouveaux processus ou connexions inhabituelles lancés par l’utilisateur de l’application.
Recommandations selon l’usage
- Site WordPress ou site d’entreprise en hébergement web : rien à faire. L’hébergeur met à jour les bibliothèques système. Continuez à tenir WordPress, le thème et les extensions à jour.
- Applications Node.js dans cPanel : dans « Setup Node.js App », choisissez Node.js 22 ou plus récent et redémarrez l’application.
- VPS ou serveur propre : vous gérez le système vous-même. Effectuez les vérifications ci-dessus, mettez à jour, redémarrez et reconstruisez les conteneurs.
- Développeurs : mettez à jour Node.js en local et dans la CI, reconstruisez les images et vérifiez les dépendances qui embarquent leur propre copie de Brotli.
- Tous les autres : mettez à jour votre navigateur et vos applications. Chrome et Firefox intègrent déjà le correctif.
Ce que nous avons fait chez HostOn
Sur nos serveurs d’hébergement web, Node.js tourne déjà dans la version corrigée 22.23.4, y compris dans « Setup Node.js App » de cPanel (dès le forfait Pilatus). Les versions 18 et 20 ne reçoivent plus de correctifs : passez donc vos applications à 22. Nous mettons à jour les paquets système dès que les distributions publient le correctif. Avec un VPS, vous gérez le système vous-même et devez appliquer les étapes ci-dessus. Besoin d’aide ? Ouvrez un ticket dans l’espace client ou écrivez-nous via la page Contact.
Chronologie
- 21 octobre 2026 : sortie de Brotli 1.0.10, 1.1.1 et 1.2.1 ainsi que de Node.js 22.23.4, 24.22.1 et 26.12.1.
- 22–23 octobre : les paquets Python Brotli et brotlicffi sont corrigés ; du code de démonstration public apparaît.
- 24 octobre : correctifs pour la gem Ruby et l’extension PHP brotli.
- 25 octobre : mises à jour Microsoft pour .NET et règle WAF d’urgence de Cloudflare.
- 26 octobre : PHP a reconstruit ses paquets Windows ; aucune attaque réelle signalée.
Sources : BleepingComputer, Wiz, JFrog Security Research, Phoenix Security, Ubuntu Security, The Hacker News.
Questions fréquentes sur le sujet
HTTP2Shell (CVE-2026-111497), aussi appelée Node2Shell ou Broccoli2Shell, est une écriture hors limites dans le décodeur Brotli de Google. Des données compressées piégées font écrire le décodeur au-delà d’un tampon. Cela peut faire planter le processus, exposer de la mémoire ou, dans certaines conditions, permettre l’exécution de code à distance.
Non. Le nom est trompeur : le bug se trouve dans le décodeur Brotli, pas dans le protocole HTTP/2. Toute application qui décompresse des données Brotli provenant de sources non fiables peut être touchée, quel que soit le protocole.
Node.js 22.23.4, 24.22.1 ou 26.12.1 ou plus récent sur la même branche. Les versions 18, 20, 23 et 25 ne reçoivent plus de mises à jour et n’auront pas le correctif ; migrez-les vers une branche prise en charge.
WordPress n’utilise pas directement le décodeur Brotli. Les bibliothèques système qui décompressent Brotli sont mises à jour par les paquets de la distribution. Sur l’hébergement web HostOn, nous nous en chargeons : pour un site WordPress classique, vous n’avez rien à faire.
Au 26 octobre 2026, aucune attaque réelle n’a été signalée et la faille ne figure pas dans le catalogue CISA des vulnérabilités activement exploitées. Du code de démonstration public existe toutefois, et Imperva a démontré l’exécution de code sur une version vulnérable de Node.js : mettez à jour maintenant.
Non. Bloquer les requêtes avec Content-Encoding: br ne protège que les données qui arrivent au serveur. Si votre application télécharge des ressources d’autres sites, un serveur malveillant peut lui envoyer une réponse Brotli. Seule la mise à jour protège complètement.
Oui. Un processus lancé avant la mise à jour continue d’utiliser l’ancien code en mémoire. Redémarrez les applications Node.js et Python ainsi que les services qui utilisent la bibliothèque Brotli, et reconstruisez les images Docker.



