Une faille critique du décodeur Brotli permet l'exécution de code à distance dans Node.js, Bun et Python
Un bug de corruption de mémoire dans la bibliothèque C Brotli de Google, référencé sous CVE-2026-111497, permet l'exécution de code à distance dans plusieurs environnements d'exécution, notamment Node.js et Bun.
Traduit automatiquement depuis l'original anglais.
Une vulnérabilité critique de corruption de mémoire dans la bibliothèque de compression Brotli de Google a exposé des piles logicielles largement utilisées à un risque potentiel d'exécution de code à distance. Divulguée le 21 octobre 2026, cette faille affecte Node.js, Bun, des paquets Python ainsi que des proxys d'infrastructure comme Envoy et Istio. Bien qu'aucune attaque active n'ait été signalée, les chercheurs ont réussi à démontrer l'exécution de code sur des versions non corrigées de Node.js.
Ce qui s'est passé
La vulnérabilité, identifiée sous CVE-2026-111497, réside dans le code C responsable du décodage des données compressées avec Brotli. Étant donné que de nombreuses applications et environnements d'exécution intègrent leur propre copie de ce décodeur, le bug se propage indépendamment dans différents écosystèmes. Google lui a attribué une cote de sévérité critique de 9,2 sur l'échelle CVSS 4.0, tandis que Node.js l'a classée comme haute et Red Hat comme importante. La cause racine avait en réalité été corrigée dans le code source de Brotli le 27 février, mais elle est restée non publiée jusqu'au 21 octobre car les développeurs ne l'avaient initialement pas reconnue comme une vulnérabilité de sécurité.
L'équipe Red Team d'Imperva a démontré qu'un attaquant pouvait exécuter du code arbitraire sur une version non modifiée de Node.js 24.22.0 fonctionnant sous Linux ARM64. Ils y sont parvenus en envoyant des données compressées spécifiquement conçues via une réponse récupérée ou le corps d'une requête Express. Bien que cet exploit ait nécessité plusieurs tentatives et n'ait pas été publié publiquement, il confirme que le risque théorique est bien réel. L'équipe Codex Security d'OpenAI, qui a signalé la faille, a noté que le problème fonctionne dans les deux sens : des clients malveillants peuvent compromettre des serveurs, et des serveurs malveillants peuvent compromettre des clients.
Comment cela fonctionne
Brotli est un algorithme de compression développé par Google pour réduire la taille du trafic web. La vulnérabilité est un défaut de lecture et d'écriture au-delà des limites d'un tampon (buffer over-read and overwrite) dans le décodeur. Lorsqu'un programme traite des données Brotli spécifiquement conçues, le décodeur écrit au-delà de la fin du tampon de mémoire alloué. Cette corruption de mémoire peut entraîner des plantages, des fuites de données ou l'exécution d'instructions contrôlées par l'attaquant. Puisque le bug existe dans la bibliothèque C sous-jacente, tout logiciel lié ou intégrant des versions vulnérables du code Brotli de Google hérite du risque.
L'exposition dépend de la capacité du logiciel à décoder activement des flux Brotli non fiables. Dans Node.js et Bun, cela se produit lors de l'utilisation de l'API intégrée fetch() pour récupérer des réponses avec Content-Encoding: br, ou lorsque des middlewares comme Express 5 et body-parser 2 décompressent les corps de requêtes. En Python, le risque est plus large ; si les paquets Brotli ou brotlicffi sont installés, les clients HTTP tels que requests, urllib3 et httpx peuvent automatiquement décoder les réponses Brotli sans intervention explicite du développeur. Les outils d'infrastructure comme Envoy et Istio ne sont vulnérables que si la décompression Brotli est explicitement activée dans leur configuration.
Détails clés
- Identifiant CVE : CVE-2026-111497.
- Versions Node.js affectées : 22.x, 24.x et 26.x avant les correctifs ; les versions 20.x et antérieures sont en fin de vie.
- Versions Node.js corrigées : 22.23.4, 24.22.1 et 26.12.1.
- Versions Bun affectées : 1.4.3 et antérieures ; corrigé dans la 1.4.4.
- Paquets Python affectés :
Brotli1.2.0 et antérieurs,brotlicffi1.2.0.x et antérieurs ; corrigés respectivement dans les versions 1.2.1 et 1.2.1.0. - Infrastructure : Envoy et Istio ne sont affectés que si la décompression Brotli est configurée et activée.
Pourquoi c'est important
Pour les équipes d'ingénierie, cette vulnérabilité met en lumière les risques cachés liés aux dépendances transitives et aux bibliothèques C intégrées. Contrairement aux vulnérabilités typiques des paquets JavaScript, ce défaut réside dans l'environnement d'exécution lui-même. Mettre à jour une dépendance dans package.json est insuffisant si l'environnement d'exécution Node.js ou Bun sous-jacent reste non corrigé. De plus, les développeurs Python peuvent être vulnérables même s'ils n'importent jamais directement une bibliothèque Brotli, car les clients HTTP courants la chargent automatiquement. Cela crée une surface d'attaque silencieuse que les scanners de dépendances standard pourraient manquer s'ils n'inspectent pas les liaisons C au niveau système ou transitive.
Le retard dans la publication du correctif souligne également une lacune dans la maintenance open-source. Le changement de code existait depuis des mois sans publication, laissant les systèmes exposés malgré l'existence du patch. Ce scénario complique la réponse aux incidents, car les équipes ne peuvent plus compter uniquement sur les alertes automatiques des registres de paquets. Une vérification manuelle des versions des environnements d'exécution et des images de conteneurs est désormais nécessaire, surtout pour les services qui traitent des données externes ou agissent comme clients envers d'autres serveurs.
Ce que vous pouvez faire
- Mettez à jour Node.js vers les versions 22.23.4, 24.22.1 ou 26.12.1, et Bun vers la version 1.4.4 ou ultérieure.
- Mettez à niveau le paquet Python
Brotlivers la version 1.2.1 etbrotlicffivers la version 1.2.1.0, ou désinstallez-les s'ils ne sont pas strictement nécessaires. - Redémarrez tous les services et reconstruisez les images de conteneurs après la mise à jour, car les processus en cours conservent l'ancienne bibliothèque vulnérable en mémoire.
- Si des mises à jour immédiates sont impossibles, configurez vos proxys pour rejeter les requêtes avec
Content-Encoding: bravant qu'elles n'atteignent l'application. - Désactivez le décodage automatique Brotli dans les clients HTTP et retirez
brdes en-têtesAccept-Encodinglorsque c'est faisable, bien que les serveurs puissent toujours envoyer du contenu Brotli. - Vérifiez manuellement les versions installées des paquets Python, car les scanners de dépendances comme Dependabot peuvent ne pas encore signaler les paquets PyPI spécifiques associés à cette CVE.



