Faille critique du décodeur Brotli affectant Node.js, Python et les services HTTP
La CVE-2026-111497 permet l'exécution de code à distance via des flux Brotli spécialement conçus dans les principaux environnements d'exécution. Des correctifs sont disponibles pour Node.js, Python, Bun et Envoy.
Traduit automatiquement depuis l'original anglais.
Une vulnérabilité critique dans la bibliothèque de compression Google Brotli, référencée sous le nom CVE-2026-111497, expose les principaux environnements d'exécution logiciels à l'exécution de code à distance. Divulguée le 23 octobre 2026, cette faille affecte Node.js, Python, Bun ainsi que divers composants d'infrastructure comme Envoy et Istio. Les développeurs doivent impérativement patcher les bibliothèques concernées ou désactiver immédiatement le décodage Brotli pour prévenir une éventuelle compromission des serveurs.
Ce qui s'est passé
Initialement baptisée « Node2Shell » lors de sa divulgation par Node.js le 22 octobre, cette vulnérabilité a révélé des implications plus larges au sein de l'écosystème logiciel. Elle provient d'une erreur de sécurité mémoire dans le décodeur Brotli, permettant à un attaquant non authentifié de corrompre la mémoire du processus. En envoyant un flux de données compressées spécialement conçu, un adversaire peut faire planter un service, divulguer des informations sensibles ou exécuter du code arbitraire. Le système commun de notation des vulnérabilités (CVSS) v4.0 attribue à ce problème une note de 9,2, le classant comme critique.
OpenAI a révélé avoir découvert la cause racine en février 2026. Bien que le bug sous-jacent ait été corrigé dans le code source de Brotli à cette époque, il n'avait pas été identifié comme une vulnérabilité de sécurité ; aucun correctif n'a donc été publié jusqu'à présent. Ce délai signifie que tous les projets intégrant leur propre copie de la bibliothèque Brotli sont restés exposés pendant plusieurs mois. Au 23 octobre, des correctifs ont été publiés pour libbrotli, Python, C++, Node.js, Bun et Envoy, avec d'autres mises à jour attendues pour les applications dépendantes.
Fonctionnement technique
Brotli est un algorithme de compression sans perte largement utilisé pour réduire la taille du contenu web tel que HTML, CSS et JavaScript lors de la transmission HTTP. La vulnérabilité réside dans la fonction DecodeBlockTypeAndLength() au sein du décodeur. Cette fonction gère les changements de blocs, qui se produisent lorsqu'un flux de données modifie l'arbre de Huffman utilisé pour la décompression. Dans les versions vulnérables (1.0.3 à 1.2.0), la fonction retourne une simple valeur booléenne incapable de distinguer un flux malformé d'une demande de données supplémentaires.
Les appelants sur le chemin de décodage rapide ignorent cette valeur de retour, conduisant à un état où le décodeur continue son traitement alors qu'il devrait s'arrêter. Un attaquant peut exploiter cette faille en créant un flux qui épuise la longueur d'un bloc et force un changement invalide. Le décodeur effectue alors une écriture hors limites, débordant un petit tampon de travail et endommageant la mémoire adjacente. Le correctif introduit un code d'erreur spécifique, BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH, garantissant que le décodeur s'arrête immédiatement upon encountering such format errors.
Détails clés
- Versions affectées : Brotli 1.0.3 à 1.2.0 sur toutes les plateformes.
- Versions corrigées : Brotli 1.2.1, 1.1.1 et 1.0.10 ; brotlicffi 1.2.1.0.
- Correctifs des environnements d'exécution : 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.
- Impact sur Python : Les paquets
Brotlietbrotlicffisont vulnérables si la version 1.2.0 ou antérieure est installée. - Lacune de détection : Les bases de données d'avis ne font pas encore correspondre la CVE aux paquets PyPI, de sorte que des outils comme Dependabot peuvent ne pas la signaler automatiquement.
- Vecteur d'attaque : Accès distant non authentifié via des requêtes ou réponses HTTP contenant des données Brotli malveillantes.
Pourquoi c'est important
Cette vulnérabilité met en lumière les risques associés aux dépendances transitives dans les chaînes d'approvisionnement logicielles modernes. De nombreux développeurs n'importent pas explicitement Brotli dans leur code, mais les clients HTTP populaires tels que requests, httpx et urllib3 en Python, ou le fetch intégré de Node.js, le chargent automatiquement s'il est présent. Cela signifie qu'une application peut être vulnérable sans aucune référence directe à la bibliothèque dans son code source. La nature automatique de ces dépendances rend difficile l'évaluation de l'exposition sans une inspection approfondie de l'arbre des dépendances.
Pour les équipes développant des services réseau, l'impact est sévère car la surface d'attaque inclut le trafic entrant et sortant. Un client malveillant peut cibler un serveur en envoyant des corps de requêtes compressés, tandis qu'un serveur malveillant peut cibler un client en renvoyant des réponses compressées. Ce modèle de menace bidirectionnel nécessite un patching complet de tous les services traitant le trafic HTTP, y compris les microservices internes et les API externes. Le retard dans la reconnaissance de l'implication sécuritaire du correctif de février souligne davantage la nécessité d'une surveillance rigoureuse des modifications des bibliothèques amont.
Que pouvez-vous faire
- Mettre à jour les environnements d'exécution : Mettez à jour Node.js vers 22.23.4, 24.22.1 ou 26.12.1, et Bun vers 1.4.4 ou ultérieur.
- Mettre à jour les paquets Python : Exécutez
pip install -U "Brotli>=1.2.1"etpip install -U "brotlicffi>=1.2.1.0"dans tous les environnements. - Reconstruire les conteneurs : Régénérez les fichiers de verrouillage (lockfiles) et reconstruisez les images de conteneurs pour vous assurer que les versions corrigées sont incluses dans les artefacts déployés.
- Désactiver le décodage : Si un patching immédiat n'est pas possible, désactivez le décodage Brotli en retirant
brdes en-têtesAccept-Encodinget en rejetant les requêtes entrantes avecContent-Encoding: brau niveau du proxy. - Vérifier les dépendances : Utilisez
pipdeptreeou des outils similaires pour identifier quelles bibliothèques tirent Brotli comme dépendance transitive. - Surveiller les avis : Consultez les bulletins de sécurité spécifiques aux fournisseurs pour les paquets du système d'exploitation, car ils peuvent intégrer des correctifs sans changer le numéro de version amont.



