Le 23 octobre 2026, la faille CVE-2026-111497 a été rebaptisée HTTP2Shell. D'abord connue sous le nom Node2Shell lors de sa divulgation le 21 octobre dans Node.js et Python, la vulnérabilité du décodeur Brotli de Google touche en réalité toute la pile HTTP : curl/libcurl, Envoy, Istio, Bun et les applications C++ qui embarquent la bibliothèque. Score CVSS v4.0 : 9.2 sur 10 (critique). Si vous administrez un VPS Linux (serveur virtuel), un VPS Windows ou un serveur dédié, les composants à auditer vont bien au-delà de Node.js et Python : vos applications web, vos scripts d'automatisation et chaque paquet système qui embarque la libbrotli sont potentiellement exposés.
Source : Aikido Security, "Node2Shell evolves to HTTP2Shell", 23 octobre 2026.
Rappel : le bug dans le décodeur Brotli (CVE-2026-111497)
La faille se situe dans la bibliothèque C de Google Brotli, versions 1.0.3 à 1.2.0, dans la fonction DecodeBlockTypeAndLength. Un flux Brotli compressé malformé provoque une écriture hors limites dans un tampon interne du décodeur. Les conséquences pour un attaquant distant : crash du processus, fuite de données en mémoire ou exécution de code arbitraire à distance, sans authentification préalable. Le bug a été découvert en février 2026 par OpenAI Codex Security, mais le correctif n'a été publié que le 21 octobre. Notre article précédent sur Node2Shell détaille le mécanisme technique et les commandes de vérification pour Node.js et Python.
Pourquoi le renommage en HTTP2Shell
Le nom Node2Shell désignait initialement un bug Node.js. En deux jours, la communauté sécurité a démontré que le même code C vulnérable est embarqué dans des dizaines de logiciels qui décompressent du Brotli sur le réseau. Le vecteur d'attaque est bidirectionnel : un serveur malveillant peut envoyer une réponse HTTP compressée en Brotli qui exploite le client, et un client malveillant peut envoyer un corps de requête Brotli qui exploite le serveur. La compression Brotli étant intégrée nativement dans HTTP/2 et largement adoptée en HTTP/1.1 via l'en-tête Content-Encoding: br, le rayon d'action de la faille couvre toute la pile HTTP. Le nom HTTP2Shell reflète cette réalité.
Les nouveaux composants à auditer et patcher
Au-delà de Node.js et Python (déjà couverts dans notre premier article), voici les composants confirmés vulnérables qu'un administrateur de serveur doit vérifier :
| Composant | Exposition | Version corrigée |
|---|---|---|
| curl / libcurl | Toute requête avec --compressed décompresse les réponses Brotli. Scripts d'automatisation, webhooks, API : curl est présent sur la quasi-totalité des serveurs Linux. | Mettre à jour la libbrotli système vers 1.0.10, 1.1.1 ou 1.2.1 |
| Envoy | Le reverse proxy et load balancer décompresse les flux Brotli entrants et sortants. Utilisé comme sidecar dans les architectures de service mesh. | 1.40.0, 1.39.3, 1.38.6, 1.37.8 |
| Istio | Le service mesh repose sur Envoy comme data plane. Chaque sidecar Istio qui traite du trafic HTTP avec Brotli est un vecteur d'exploitation. | 1.31.2, 1.30.6, 1.29.9 |
| Bun | Le runtime JavaScript alternatif embarquait une copie vulnérable de Brotli pour la décompression HTTP. | 1.4.4 |
| Applications C++ | Tout programme C/C++ qui lie la libbrotli (versions 1.0.3 à 1.2.0) pour décoder des données est vulnérable. Bases de données analytiques (Apache Arrow, ClickHouse, DuckDB) et outils de compression sur mesure. | Recompiler avec libbrotli 1.2.1 |
| Git for Windows | Embarque curl compilé avec Brotli. Les opérations git clone, git fetch et git pull via HTTPS décompressent les réponses Brotli du serveur. | En attente (Brotli 1.2.0 encore inclus dans Git 2.56.0.windows.3) |
Sur un VPS Linux ou un serveur dédié, la surface d'attaque se multiplie : le serveur web, les scripts d'automatisation, les opérations curl, les proxies Envoy et les conteneurs Docker peuvent chacun embarquer une copie vulnérable de la bibliothèque Brotli.
Apache et Nginx ne sont pas touchés
Les deux serveurs web les plus déployés ne décodent pas le Brotli par défaut. Le module mod_brotli d'Apache et le module ngx_brotli de Nginx ne font que compresser les réponses sortantes : ils n'exécutent pas le décodeur Brotli sur les requêtes entrantes. Tant que vous n'avez pas activé un module tiers qui décompresse les corps de requêtes Brotli entrants, vos serveurs Apache et Nginx ne sont pas exposés à CVE-2026-111497.
Cette distinction est essentielle pour les administrateurs : le serveur web frontal n'est probablement pas le maillon faible. Ce sont les applications qui tournent derrière (Node.js, Python, Bun) et les composants de la pile réseau (Envoy, Istio, curl) qui doivent être audités en priorité.
Tableau récapitulatif des versions corrigées
Ce tableau regroupe tous les composants confirmés vulnérables, y compris ceux déjà couverts dans notre article sur Node2Shell :
| Composant | Versions vulnérables | Version corrigée |
|---|---|---|
| Bibliothèque C Brotli (Google) | 1.0.3 à 1.2.0 | 1.0.10 / 1.1.1 / 1.2.1 |
| Node.js 22.x (LTS) | < 22.23.4 | 22.23.4 |
| Node.js 24.x (LTS) | < 24.22.1 | 24.22.1 |
| Node.js 26.x (Current) | < 26.12.1 | 26.12.1 |
Python brotli (PyPI) | ≤ 1.2.0 | 1.2.1 |
Python brotlicffi (PyPI) | ≤ 1.2.0.x | 1.2.1.0 |
| Bun | < 1.4.4 | 1.4.4 |
| Envoy | < 1.37.8 / 1.38.6 / 1.39.3 / 1.40.0 | 1.37.8, 1.38.6, 1.39.3, 1.40.0 |
| Istio | < 1.29.9 / 1.30.6 / 1.31.2 | 1.29.9, 1.30.6, 1.31.2 |
| curl / libcurl | Toute version avec libbrotli 1.0.3-1.2.0 | Mettre à jour la libbrotli système |
| Git for Windows | Git 2.56.0.windows.3 et antérieurs | En attente |
Comment auditer les nouveaux composants sur votre serveur
Connectez-vous en SSH à votre VPS ou serveur dédié. Avant toute mise à jour, effectuez une sauvegarde de vos données avec rsync.
Vérifier la libbrotli système
Sur les distributions Debian et Ubuntu, la libbrotli est un paquet système partagé par curl et d'autres programmes :
dpkg -l libbrotli1 2>/dev/null | grep -i brotli
apt list --installed 2>/dev/null | grep brotli
Mettez à jour vers la version corrigée :
sudo apt update && sudo apt upgrade libbrotli1
Pour lister tous les paquets installés qui dépendent de la libbrotli sur votre système Unix, utilisez la commande suivante :
apt rdepends --installed libbrotli1 2>/dev/null
Si votre distribution n'a pas encore publié le correctif dans ses dépôts de paquets, compilez la libbrotli 1.2.1 depuis les sources ou appliquez la mitigation décrite plus bas.
Vérifier curl
Vérifiez si votre installation de curl supporte Brotli :
curl --version | grep brotli
Si la sortie mentionne brotli, votre curl décompresse les réponses Brotli lorsqu'il utilise --compressed. La mise à jour de la libbrotli système corrige curl sans recompilation.
Vérifier Envoy
Si vous utilisez Envoy comme reverse proxy ou dans un service mesh :
envoy --version
Mettez à jour vers la version corrigée de votre branche (1.37.8, 1.38.6, 1.39.3 ou 1.40.0). Pour les déploiements conteneurisés, reconstruisez les images avec la version corrigée d'Envoy.
Vérifier Istio
Si vous utilisez Istio comme service mesh :
istioctl version
Mettez à jour vers 1.30.6 ou 1.31.2. La branche 1.29 est en fin de vie : si vous l'utilisez encore, passez à une branche supportée.
Vérifier Bun
bun --version
Si la version est inférieure à 1.4.4, mettez à jour avec bun upgrade.
Images Docker
Chaque conteneur Docker embarque sa propre copie des bibliothèques. Reconstruisez les images qui contiennent l'un des composants listés ci-dessus :
docker compose build --no-cache && docker compose up -d
Scripts PHP et applications web
Les scripts PHP qui utilisent l'extension php-curl pour effectuer des requêtes HTTP sortantes s'appuient sur la libbrotli du système pour décompresser les réponses encodées en Brotli. C'est le cas des applications web courantes : CMS, panels d'admin, scripts de déploiement et webhooks. Si le paquet libbrotli installé sur votre machine est vulnérable, toute requête HTTP sortante avec Brotli activé l'est aussi. Vérifiez la configuration avec la commande suivante :
php -r "echo 'curl: ' . curl_version()['version'] . PHP_EOL;"
php -i | grep -i brotli
Après la mise à jour du paquet libbrotli, redémarrez le service PHP-FPM pour que le processus charge la bibliothèque corrigée :
sudo systemctl restart php8.3-fpm
Sous Windows
Sur un VPS Windows, Git for Windows embarque sa propre copie de curl compilée avec la libbrotli vulnérable. Les opérations git clone, git fetch et git pull via HTTPS décompressent les réponses Brotli du serveur distant. La version 2.56.0.windows.3 inclut encore Brotli 1.2.0 : aucun correctif n'a été publié. Vérifiez votre version :
git --version
curl --version
En attendant la mise à jour du package Git for Windows, limitez l'exposition dans vos scripts d'automatisation en forçant l'encodage gzip pour les appels curl :
curl --header "Accept-Encoding: gzip, deflate" https://example.com/api
Mitigation temporaire : rejeter Brotli en bordure
En attendant que tous les composants soient patchés, bloquez la décompression Brotli au niveau du reverse proxy frontal. Cette mesure neutralise le vecteur d'attaque entrant (requêtes avec Content-Encoding: br) sans modifier le code applicatif.
Nginx
# Dans le bloc server ou location
if ($http_content_encoding ~* "br") {
return 415;
}
Caddy
@brotli_request header Content-Encoding br
respond @brotli_request 415
Pour bloquer aussi le vecteur sortant (votre serveur qui récupère des réponses Brotli malveillantes), retirez br de l'en-tête Accept-Encoding envoyé par vos clients HTTP. Sur curl, évitez --compressed ou forcez --header "Accept-Encoding: gzip, deflate" en attendant la mise à jour.
Après chaque modification de la configuration du reverse proxy, vérifiez la syntaxe et redémarrez le service :
# Nginx
sudo nginx -t && sudo systemctl restart nginx
# Caddy
caddy validate --config /etc/caddy/Caddyfile && sudo systemctl restart caddy
Ces mesures de mitigation ne remplacent pas la mise à jour des paquets vulnérables. Elles réduisent la fenêtre d'exposition le temps de patcher chaque composant. Configurez votre pare-feu nftables ou UFW pour restreindre les ports TCP sortants aux adresses IP strictement nécessaires et bloquer les connexions vers des serveurs inconnus sur les ports 80 et 443.
Ce que ça change pour les administrateurs de serveurs
HTTP2Shell illustre un schéma classique des vulnérabilités dans les bibliothèques C partagées sur les systèmes Unix et Linux : un seul bug dans un paquet, des dizaines de logiciels touchés. Le passage de Node2Shell à HTTP2Shell signifie que la vérification de Node.js et Python ne suffit pas. Sur une machine virtuelle (VPS) ou un serveur dédié, chaque composant qui décompresse du Brotli est un vecteur d'attaque potentiel : curl, Envoy, Istio, Bun, les scripts d'automatisation, les applications web et les images Docker qui embarquent la bibliothèque vulnérable.
Les serveurs de jeu FiveM, Minecraft et Rust ne sont pas directement touchés (leurs protocoles réseau n'utilisent pas Brotli), mais les panels d'administration web (txAdmin, Pterodactyl) et les outils qui tournent sur le même serveur peuvent l'être. Si votre hébergeur gère les mises à jour système, vérifiez avec son support que le paquet libbrotli a bien été patché. Si vous administrez vous-même votre serveur virtuel, auditez chaque composant installé, appliquez les mises à jour de paquets et automatisez les mises à jour de sécurité sur vos distributions Ubuntu et Debian. Après la mise à jour, un restart des services (PHP-FPM, Envoy, conteneurs Docker) est nécessaire pour charger la version corrigée en RAM. Pour renforcer la sécurité globale de votre infrastructure, consultez nos guides pour sécuriser SSH et sécuriser un serveur dédié.
FiveM
Minecraft
Rust
RedM
Hytale