Offre Durée limitée : -10% sur tout le site* avec le code WELCOME10

HTTP2Shell : la faille Brotli CVE-2026-111497 s'étend à curl, Envoy et toute la pile HTTP

Publié le 25 octobre 2026 9 min de lecture 8 sections

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 :

ComposantExpositionVersion corrigée
curl / libcurlToute 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
EnvoyLe 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
IstioLe 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
BunLe 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 WindowsEmbarque 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 :

ComposantVersions vulnérablesVersion corrigée
Bibliothèque C Brotli (Google)1.0.3 à 1.2.01.0.10 / 1.1.1 / 1.2.1
Node.js 22.x (LTS)< 22.23.422.23.4
Node.js 24.x (LTS)< 24.22.124.22.1
Node.js 26.x (Current)< 26.12.126.12.1
Python brotli (PyPI)≤ 1.2.01.2.1
Python brotlicffi (PyPI)≤ 1.2.0.x1.2.1.0
Bun< 1.4.41.4.4
Envoy< 1.37.8 / 1.38.6 / 1.39.3 / 1.40.01.37.8, 1.38.6, 1.39.3, 1.40.0
Istio< 1.29.9 / 1.30.6 / 1.31.21.29.9, 1.30.6, 1.31.2
curl / libcurlToute version avec libbrotli 1.0.3-1.2.0Mettre à jour la libbrotli système
Git for WindowsGit 2.56.0.windows.3 et antérieursEn 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é.

FAQ

Quelle est la différence entre Node2Shell et HTTP2Shell ?

Node2Shell et HTTP2Shell désignent la même vulnérabilité : CVE-2026-111497, un dépassement de tampon dans le décodeur Brotli de Google. Le nom Node2Shell a été utilisé lors de la divulgation initiale le 21 octobre 2026, quand seul Node.js était identifié comme touché. Le nom HTTP2Shell a remplacé Node2Shell à partir du 23 octobre, quand la communauté sécurité a confirmé que curl, Envoy, Istio, Bun et les applications C++ embarquant la libbrotli étaient aussi vulnérables.

Apache et Nginx sont-ils touchés par HTTP2Shell ?

Non. Les modules Brotli d'Apache (mod_brotli) et de Nginx (ngx_brotli) 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, vos serveurs Apache et Nginx ne sont pas exposés à CVE-2026-111497.

Comment savoir si curl est vulnérable sur mon serveur ?

Exécutez curl --version en ligne de commande. Si la sortie mentionne brotli dans la liste des fonctionnalités, votre installation de curl décompresse les réponses Brotli lorsque l'option --compressed est utilisée. Vérifiez la version de la libbrotli installée sur votre système avec dpkg -l libbrotli1 (Debian/Ubuntu). Si elle est entre 1.0.3 et 1.2.0, mettez à jour vers 1.0.10, 1.1.1 ou 1.2.1.

Les serveurs de jeu FiveM, Minecraft ou Rust sont-ils vulnérables ?

Les protocoles réseau de FiveM, Minecraft et Rust n'utilisent pas la compression Brotli. Ces serveurs de jeu ne sont pas directement vulnérables à HTTP2Shell. En revanche, les outils qui tournent sur le même VPS (panel txAdmin, Pterodactyl, scripts Python, bots Discord, opérations curl) peuvent être exposés si la libbrotli ou les runtimes ne sont pas à jour.

Comment bloquer Brotli en attendant la mise à jour ?

Configurez votre reverse proxy frontal (Nginx, Caddy) pour rejeter les requêtes entrantes avec l'en-tête Content-Encoding: br. Sous Nginx, ajoutez une règle if ($http_content_encoding ~* "br") { return 415; } dans le bloc server. Pour le vecteur sortant, retirez br de l'en-tête Accept-Encoding envoyé par vos clients HTTP. Cette mitigation réduit la fenêtre d'exposition mais ne remplace pas la mise à jour des composants vulnérables.

Faut-il reconstruire les images Docker après la mise à jour ?

Oui. Chaque conteneur Docker embarque sa propre copie des bibliothèques système, y compris la libbrotli. Mettre à jour la libbrotli sur l'hôte ne corrige pas les conteneurs. Reconstruisez vos images avec docker compose build --no-cache puis relancez les conteneurs avec docker compose up -d pour appliquer le correctif dans chaque conteneur.

Les scripts PHP et les applications web sont-ils exposés à HTTP2Shell ?

Oui, si l'extension php-curl est activée et que la libbrotli système est vulnérable. Les scripts PHP qui effectuent des requêtes HTTP sortantes (appels API, webhooks, scripts de déploiement) utilisent libcurl, qui décompresse les réponses Brotli via la libbrotli. Mettez à jour le paquet libbrotli puis redémarrez PHP-FPM avec sudo systemctl restart php8.3-fpm pour charger la version corrigée.

Mon VPS Windows est-il concerné par HTTP2Shell ?

Oui, partiellement. Sous Windows, Git for Windows embarque curl compilé avec la libbrotli vulnérable (Brotli 1.2.0 dans Git 2.56.0.windows.3). Les opérations git clone, git fetch et git pull via HTTPS décompressent les réponses Brotli du serveur distant. En attendant le correctif du package Git for Windows, forcez l'encodage gzip dans vos scripts d'automatisation : curl --header "Accept-Encoding: gzip, deflate".

Faut-il redémarrer les services après la mise à jour de la libbrotli ?

Oui. La libbrotli est une bibliothèque partagée chargée en mémoire au démarrage des processus. Après la mise à jour du paquet, les processus déjà en cours continuent d'utiliser l'ancienne version vulnérable. Un restart de PHP-FPM, Envoy, des conteneurs Docker et de tout service qui utilise curl ou la libbrotli est nécessaire pour charger la version corrigée.

Comment lister les paquets qui dépendent de la libbrotli sur mon serveur ?

Sur Debian et Ubuntu, exécutez apt rdepends --installed libbrotli1 pour afficher tous les paquets installés qui dépendent de la libbrotli. Cette commande identifie les composants à auditer sur votre serveur. Vérifiez ensuite la version installée avec dpkg -l libbrotli1 : si elle est entre 1.0.3 et 1.2.0, le paquet est vulnérable et doit être mis à jour.

Le pare-feu protège-t-il contre HTTP2Shell ?

Un pare-feu (UFW, nftables, iptables) ne bloque pas HTTP2Shell directement : la faille s'exploite via des flux HTTP valides sur les ports TCP 80 et 443, que le pare-feu laisse passer. En revanche, restreindre les ports TCP sortants et les adresses IP autorisées réduit la surface d'attaque en limitant les connexions vers des serveurs malveillants. La vraie protection reste la mise à jour de la libbrotli et le rejet de Content-Encoding: br au niveau du reverse proxy.