Threat Intelligence

CVE-2026-111497 : écriture hors limites dans le décodeur Brotli exploitable à distance

Admin CyberAfrik 06 November 2026 62 lectures

Rapport CTI technique du 6 novembre 2026

Résumé exécutif

CVE-2026-111497 affecte le décodeur Brotli de Google dans les versions 1.0.3 à 1.2.0. Le défaut de vérification du code retour, classé CWE-252, permet à un attaquant distant non authentifié de fournir un flux Brotli compressé malveillant. Ce flux corrompt l'état mémoire adjacent du décodeur. Il peut divulguer des données sensibles, provoquer un déni de service ou, dans certains contextes, exécuter du code arbitraire. La CISA a inscrit la vulnérabilité au catalogue KEV le 27 octobre 2026, avec une échéance de remédiation au 10 novembre 2026.

Le correctif consiste à mettre à jour les bibliothèques ou binaires Brotli vers 1.0.10, 1.1.1 ou 1.2.1. Node.js a publié ses correctifs le 21 octobre 2026 pour les lignes 22.x, 24.x et 26.x. La portée dépasse Node.js. Sont concernés : Bun, Envoy, Istio, des paquets PyPI, libcurl et de nombreux logiciels embarquant une copie du décodeur. La presse emploie les noms Node2Shell, Broccoli2shell et HTTP2Shell pour désigner cette faille.

Chronologie

DateÉvénement
2026-10-21Node.js publie les correctifs de sécurité pour les lignes 22.x, 24.x et 26.x et documente CVE-2026-111497.
2026-10-23andybalholm/brotli publie v1.2.7 « Detect and report invalid stream earlier », portage du commit Google 0ed4268a. Jan Schaumann signale que la faille dépasse Node.js.
2026-10-24Google publie brotli v1.2.1. patchtheplanet.org/brotli liste des correctifs Node.js, Bun, Envoy et Istio.
2026-10-25broccoli2shell.com recense d'autres consommateurs touchés, dont .NET, Chromium, Firefox et Ghostscript.
2026-10-26Harry Sintonen signale que git-remote-https est vulnérable via libcurl compilé avec Brotli.
2026-10-27La CISA ajoute CVE-2026-111497 au catalogue KEV, échéance au 2026-11-10.
2026-11-03Google Project Zero publie son analyse de la vulnérabilité.

Fiche vulnérabilité

CVE-2026-111497 | CVSS 9.2 (Critique) | Google Brotli, c/dec/decode.c

Le mécanisme exact combine une mauvaise interprétation d'un code retour et une écriture hors limites. Dans le décodeur de flux Brotli, un commutateur de bloc invalide est signalé comme un besoin temporaire de données supplémentaires plutôt que comme une erreur de format permanente. Le décodeur continue alors d'ajouter des octets d'entrée à un tampon interne de huit octets. Ce comportement produit une écriture au-delà de la fin du tampon. La NVD décrit un débordement de tampon dans c/dec/decode.c. La CISA retient la CWE-252, unchecked return value. Le correctif amont détecte et signale plus tôt le flux invalide.

ComposantVersions affectéesVersions corrigées
Google Brotli1.0.3 à 1.2.01.0.10, 1.1.1, 1.2.1
Node.js22.x, 24.x, 26.xLignes 22.x, 24.x, 26.x mises à jour le 2026-10-21
andybalholm/brotliNon précisé dans la sourcev1.2.7

L'exploitation est distante et ne requiert pas d'authentification ni d'interaction utilisateur. L'attaquant doit pouvoir faire décompresser un flux Brotli sous son contrôle par une application utilisant une version vulnérable du décodeur. Cela couvre les serveurs qui acceptent des contenus compressés en Brotli, mais aussi les clients qui décompressent des réponses ou des fichiers non fiables.

PoC public : aucun code d'exploitation public n'est référencé dans les sources techniques analysées. La couverture presse mentionne une démonstration d'exécution de code nommée Node2Shell par des chercheurs (The Hacker News, 23 octobre 2026).

L'inscription au catalogue KEV de la CISA le 27 octobre 2026 signale que la vulnérabilité est considérée comme exploitée. Aucun acteur, aucune campagne ni aucun lien avec un rançongiciel n'est nommé dans les sources fournies.

Diagramme de la chaîne d'attaque

Chaîne d'attaque de CVE-2026-111497 (Brotli)
Décodage d'un flux Brotli malveillant. Sources : github.com, nodejs.org, openwall.com, CISA KEV, NVD.

Analyse technique

Étape 1 : Réception d'un flux Brotli malveillant

L'attaquant construit un flux Brotli compressé contenant un commutateur de bloc invalide. Il le transmet à une application qui décompresse des données Brotli, par exemple via node:zlib, un serveur web acceptant Content-Encoding: br, un client libcurl avec CURLOPT_ACCEPT_ENCODING ou un service Envoy. Aucune authentification n'est requise.

La cible n'est pas le composant réseau lui-même mais le décodeur Brotli embarqué. Le flux malveillant peut arriver dans une requête HTTP, une réponse compressée ou un fichier traité localement selon le contexte de l'application.

Étape 2 : Mauvaise interprétation du commutateur de bloc invalide

Le décodeur de flux lit un commutateur de bloc invalide. Au lieu de classer l'entrée comme une erreur de format permanente, il la signale comme un besoin temporaire de données supplémentaires. Le décodeur reste dans un état d'attente et continue d'accepter des octets d'entrée.

Cette erreur de contrôle du code retour correspond à la CWE-252. Le correctif amont modifie la détection pour signaler le flux invalide plus tôt, avant que le tampon ne déborde.

Étape 3 : Écriture hors limites dans le tampon de huit octets

Le décodeur de flux ajoute les octets reçus à un tampon interne de huit octets. Comme l'état d'erreur permanente n'est jamais déclenché, l'écriture dépasse la fin du tampon et corrompt l'état mémoire adjacent du décodeur.

La corruption peut altérer les structures de contrôle du décodeur. Selon la disposition mémoire, elle peut divulguer du contenu mémoire, provoquer un crash ou permettre l'exécution de code.

Étape 4 : Impact final selon le contexte d'exécution

Les conséquences possibles sont le déni de service par arrêt du processus, la divulgation de contenus sensibles de la mémoire ou l'exécution de code arbitraire. Le résultat dépend du binaire, de la plateforme et des protections mémoire en place.

Dans Node.js, l'avis éditeur indique que l'attaque peut corrompre la mémoire du processus et mener à un crash, à une divulgation de mémoire ou à une exécution de code à distance.

Exposition

La vulnérabilité affecte toute application qui décompresse un flux Brotli non fiable avec une version 1.0.3 à 1.2.0. Les sources mentionnent Node.js 22.x, 24.x et 26.x, Bun, Envoy Proxy, Istio, des paquets PyPI brotli, le runtime .NET, Chromium, Firefox, Ghostscript, libcurl et git-remote-https lorsque libcurl est compilé avec Brotli. Jan Schaumann évoque aussi la possibilité que le traitement de certificats compressés par OpenSSL soit concerné, sans confirmation dans les sources analysées.

L'exposition Internet dépend du composant. Les serveurs acceptant des contenus compressés en Brotli et les clients décompressant des réponses non fiables sont directement exposés. La CISA demande d'évaluer l'exposition Internet de chaque actif et d'appliquer BOD 26-04.

Indicateurs de compromission

Aucun IOC public documenté à ce jour.

Pistes de détection :

  • Journaliser les erreurs de décodage Brotli contenant invalid block switch ou need more input répété.
  • Surveiller les crashs de processus dans c/dec/decode.c ou les segfaults corrélés à des flux Brotli entrants.
  • Contrôler les journaux applicatifs de node:zlib, Envoy, libcurl et git-remote-https lors de décompressions de contenus non fiables.
  • Analyser les flux compressés en Brotli reçus sur des points exposés pour repérer des séquences de blocs anormales.
  • Utiliser des outils de détection mémoire, type ASAN ou Valgrind, sur les binaires de décompression en environnement de test.

MITRE ATT&CK

Cartographie analytique, aucune cartographie officielle n'est publiée dans les sources.

TactiqueTechniqueIDJustification
Initial AccessExploit Public-Facing ApplicationT1190Un attaquant distant non authentifié peut envoyer un flux Brotli malveillant à une application exposée qui le décompresse.
ExecutionExploitation for Client ExecutionT1203Le traitement du flux malformé par le décodeur déclenche la corruption mémoire et peut aboutir à l'exécution de code.
CollectionData from Local SystemT1005La corruption de l'état du décodeur peut exposer le contenu de la mémoire du processus.
ImpactEndpoint Denial of ServiceT1499Un flux malformé peut provoquer l'arrêt du processus de décompression.

Remédiation : checklist opérationnelle

  1. Appliquer les correctifs Brotli : 1.0.10, 1.1.1 ou 1.2.1. Mettre à jour Node.js vers les lignes 22.x, 24.x et 26.x corrigées du 21 octobre 2026. Respecter l'échéance CISA du 10 novembre 2026.
  2. Inventorier toutes les copies embarquées ou transitives du décodeur Brotli entre 1.0.3 et 1.2.0, y compris les binaires qui ont intégré le correctif sans annonce.
  3. Mettre à jour les consommateurs identifiés : Bun, Envoy, Istio, paquets PyPI brotli, .NET, Chromium, Firefox, Ghostscript, libcurl et git-remote-https. Vérifier CURLOPT_ENCODING comme alias de CURLOPT_ACCEPT_ENCODING.
  4. Si aucun correctif n'est disponible, désactiver la décompression Brotli sur les entrées non fiables, désactiver l'acceptation d'encodage br dans libcurl ou isoler le service.
  5. Suivre les consignes CISA BOD 26-04 et les exigences de tri forensique, et évaluer l'exposition Internet de chaque actif.
  6. Mettre en place la détection des erreurs de décodage et des crashs de processus liés à Brotli.

Sources

Tags : CVE-2026-111497GoogleBrotliCWE-252écriture hors limitesNode.jsCISA KEV
Partager cet article