AIO APEX

Une faille critique du décodeur Brotli (CVSS 9.2) menace Node.js, Python et curl

Aikido Security
Partager:
Une faille critique du décodeur Brotli (CVSS 9.2) menace Node.js, Python et curl

Une vulnérabilité critique dans la bibliothèque de compression Brotli de Google, largement utilisée et référencée sous CVE-2026-111497, peut permettre à un attaquant de planter, voire d'exécuter du code, sur des serveurs et des clients traitant du trafic HTTP compressé avec Brotli. Révélée pour la première fois par le projet Node.js le 21 octobre et confirmée comme bien plus étendue dès le 23 octobre, la faille affiche un score CVSS v4.0 de 9.2, classé critique.

Brotli est le format de compression derrière l'encodage de contenu br, utilisé dans tout le web moderne pour réduire la taille des requêtes et réponses HTTP. Comme elle est intégrée ou liée statiquement dans un très grand nombre de logiciels, un bug dans le décodeur ne reste pas confiné à un seul projet. La société de sécurité Aikido, qui a suivi la propagation du problème à travers différents écosystèmes de langages, a constaté qu'il touche la bibliothèque C d'origine de Brotli (versions 1.0.3 à 1.2.0), les paquets PyPI brotli et brotlicffi, la copie intégrée à Node.js, ainsi que des consommateurs en aval comme les clients HTTP Python urllib3, requests, httpx, aiohttp et Scrapy, mais aussi Bun, Envoy, Istio et des versions de curl et libcurl liant Brotli statiquement. Selon l'analyse d'Aikido, Apache et Nginx ne sont pas concernés par défaut.

Le bug est une écriture hors limites en mémoire (CWE-787) dans le décodeur, déclenchée par un flux de données Brotli malformé. Comme la décompression se produit automatiquement dès qu'un client ou un serveur annonce prendre en charge l'encodage br, l'attaque fonctionne dans les deux sens : un client malveillant peut cibler un serveur qui décode des corps de requêtes, et un serveur malveillant peut cibler un client qui accepte des réponses compressées, sans aucune authentification requise. Aikido indique que les impacts confirmés vont de fuites mémoire et de plantages jusqu'à l'exécution de code arbitraire, bien qu'aucune exploitation réelle de la variante Node.js n'ait été observée au 22 octobre.

Fait notable, le bug de sécurité mémoire sous-jacent aurait été trouvé et corrigé silencieusement dans le code source de Brotli dès février, par des ingénieurs d'OpenAI, sans que personne ne le signale alors comme un problème de sécurité — ce qui signifie que la fenêtre de vulnérabilité est restée ouverte environ huit mois avant que cette divulgation ne relie tous les éléments.

Des correctifs sont déjà disponibles pour certains projets concernés, mais pas tous : Node.js 22.23.4, 24.22.1 et 26.12.1 ; Brotli 1.2.1 (avec rétroportages vers 1.0.10 et 1.1.1 sur les branches plus anciennes) ; brotlicffi 1.2.1.0 ; Bun 1.4.4 ; Envoy 1.40.0, 1.39.3, 1.38.6 et 1.37.8 ; et Istio 1.29.9, 1.30.6 et 1.31.2. Aikido avertit qu'au 23 octobre, les scanners de vulnérabilités standards comme pip-audit, Dependabot et Safety ne signalaient pas encore les versions affectées des paquets PyPI, ce qui signifie que les équipes s'appuyant uniquement sur l'analyse automatique des dépendances pourraient ne recevoir aucune alerte. Le seul paquet Brotli sur PyPI comptabilisant environ 82,8 millions de téléchargements par mois, l'ampleur pratique des installations non corrigées est probablement considérable.

Pour les équipes ne pouvant pas appliquer de correctif immédiatement, Aikido recommande de désinstaller Brotli ou brotlicffi lorsqu'ils sont des dépendances facultatives, et de configurer les serveurs pour rejeter les requêtes portant l'en-tête Content-Encoding: br. La société prévient que retirer simplement br de l'en-tête Accept-Encoding sortant ne suffit pas, car un décodeur toujours vulnérable peut être déclenché par n'importe quelle partie choisissant d'envoyer une charge compressée avec Brotli, indépendamment de ce qui a été demandé.

Initialement rapporté par Aikido Security. Lisez l'article original pour plus de détails.

Voir la source originale
Partager: