Une faille du décodeur Brotli oblige à corriger Node.js, Envoy et d'autres logiciels

Une faille du décodeur Brotli oblige à corriger Node.js, Envoy et d'autres logiciels

Ajoutez CyberWorldOpsà vos sources préférées sur Google
Une faille du décodeur Brotli oblige à corriger Node.js, Envoy et d'autres logiciels
Vulnérabilités

Image d’illustration générée par IA

Une vulnérabilité de corruption de mémoire dans le décodeur Brotli de Google a déclenché des mises à jour de plusieurs environnements d'exécution, de proxies et de paquets Python. Des chercheurs ont aussi démontré une exécution de code sur une version non corrigée de Node.js.

Référencée sous le nom CVE-2026-111497, la faille devient accessible lorsqu'un logiciel décompresse des données Brotli contrôlées par un attaquant. Un flux conçu à cet effet peut provoquer une écriture hors limites, pouvant exposer la mémoire, faire planter l'application ou permettre l'exécution de code arbitraire. Aucune exploitation dans la nature n'a été signalée.

Selon The Hacker News, la divulgation a commencé le 21 octobre 2026, date à laquelle Google et Node.js ont publié des correctifs. D'autres projets ont suivi avec des mises à jour de leurs propres copies du décodeur.

Les requêtes entrantes comme les réponses récupérées peuvent exposer les applications

Brotli compresse les pages web et d'autres flux de données. La vulnérabilité se trouve dans son décodeur C, plus précisément dans la gestion des changements de type de bloc située dans c/dec/decode.c, selon l'évaluation de Red Hat sur CVE-2026-111497. L'exploitation nécessite un flux malformé ; une sortie d'encodeur ordinaire et bien formée ne déclenche pas le chemin vulnérable.

Dans Node.js et Bun, l'exposition concerne les appels fetch() intégrés qui reçoivent des réponses Content-Encoding: br. Les envois entrants peuvent aussi atteindre le décodeur via la gestion du corps des requêtes, par exemple dans Express 5 et body-parser 2. Un serveur HTTP simple de Node.js ne décompresse pas automatiquement les corps de requêtes.

Les applications Python peuvent être exposées du seul fait que le paquet Brotli ou brotlicffi est installé : les clients HTTP, dont requests, urllib3, httpx et aiohttp, décodent alors automatiquement les réponses Brotli. L'application n'a pas besoin d'importer directement l'un de ces paquets de compression.

Envoy et Istio exigent que la décompression Brotli soit activée. Les déploiements où elle est désactivée n'exposent pas ce chemin du décodeur.

L'équipe Red Team d'Imperva, qui baptise sa recherche Node2Shell, a démontré une exécution de code contrôlée par un attaquant sur une version non modifiée de Node.js 24.22.0 fonctionnant sous Linux sur ARM64. Elle a transmis des données malveillantes à la fois par une réponse récupérée et par un corps de requête Express. L'exploit a nécessité plusieurs tentatives, n'a pas été publié et n'a pas été testé sur d'autres versions. Cette démonstration n'établit pas une exécution de code fonctionnelle contre chacun des produits concernés.

Red Hat indique qu'il n'existe aucune preuve de concept publique et fiable d'exécution de code à distance. L'éditeur classe la faille comme Important, avec un score CVSS 3.1 de 8,1. Il invoque les conditions d'exploitation et le durcissement de la plateforme, qui compliquent une exécution de code fiable sans éliminer les autres impacts. Envoy la classe Critique avec un score de 9,2 selon CVSS 4.0, tandis que Node.js la classe Élevée.

Les versions corrigées dépendent du produit et du déploiement

Les correctifs signalés pour la bibliothèque C de Brotli de Google sont les versions 1.0.10, 1.1.1 et 1.2.1. Les applications qui embarquent la bibliothèque doivent être mises à jour de leur côté ; installer une bibliothèque système corrigée ne remplace pas forcément un décodeur embarqué.

Pour les autres logiciels concernés, les versions corrigées signalées sont les suivantes :

  • Node.js : 22.23.4, 24.22.1 et 26.12.1, pour les branches 22.x, 24.x et 26.x correspondantes. Le rapport identifie aussi comme vulnérables les branches 20.x et antérieures de Node.js, arrivées en fin de vie.
  • Bun : 1.4.4 ; les versions 1.4.3 et antérieures sont concernées.
  • Istio : 1.31.2, 1.30.6 et 1.29.9, qui corrigent les plages concernées 1.31.0–1.31.1, 1.30.0–1.30.5 et 1.29.0–1.29.8 lorsque la décompression Brotli est activée.
  • Python Brotli : 1.2.1 ; les versions 1.2.0 et antérieures sont concernées.
  • Python brotlicffi : 1.2.1.0 ; les versions 1.2.0.x et antérieures sont concernées.

L'avis d'Envoy du 23 octobre identifie les versions concernées v1.39.2, v1.38.5, v1.37.7 et v1.36.11 sur toutes les plateformes. Il répertorie les correctifs dans v1.40.0, v1.39.3, v1.38.6, v1.37.8 et v1.36.12. L'avis limite l'impact aux déploiements dont le décompresseur Brotli est configuré. Il indique qu'un attaquant distant, non authentifié, pourrait altérer l'état du décodeur, divulguer de la mémoire, provoquer un déni de service ou éventuellement exécuter du code.

L'exposition de cdxgen concerne les analyses de dépôts et le mode serveur

L'avis de cdxgen du 22 octobre couvre les binaires autonomes et les images de conteneurs qui embarquent des environnements d'exécution vulnérables. Les versions concernées vont jusqu'à 13.4.0 et antérieures pour @cdxgen/cdxgen, et jusqu'à 12.8.8 et antérieures pour @cyclonedx/cdxgen. Les versions corrigées sont respectivement 13.5.0 et 12.8.9.

Le périmètre comprend toutes les familles d'exécutables autonomes, slim et full, sur toutes les plateformes. Les installations via npm, pnpm ou npx utilisent à la place le Node.js de l'hôte et exigent un environnement d'exécution corrigé sur cet hôte.

Avec les paramètres par défaut, l'analyse d'un dépôt non fiable peut déclencher la faille lorsque son Podfile.lock pointe vers une source :git externe. cdxgen récupère alors le podspec auprès de cet hôte et décompresse une réponse Brotli alors qu'il n'en a pas fait la demande. Le mode sécurisé autorise toujours n'importe quel hôte HTTPS. D'autres chemins impliquent les registres npm, Deno ou Dart fournis par le projet avec FETCH_LICENSE, ainsi que les sondes de registres OCI avec --bom-audit.

En mode --server, le point de terminaison /sbom décompresse les corps de requêtes Brotli avant toute validation ou authentification.

Les deux versions corrigées de cdxgen embarquent Node.js 24.22.1. La version 12.8.8 devait inclure le correctif de sécurité, mais ses binaires autonomes conservaient Node.js 24.18.0 et ses images de conteneurs n'ont pas été publiées. L'avis recommande d'utiliser la 12.8.9 ou une version ultérieure. Les versions mises à jour font également passer cdxgen-secure sur l'image de version correspondante, utilisent la version officielle 24.22.1 de Node.js pour cdxgen-ppc64 et Bun 1.4.4 pour cdxgen-bun.

Les mesures d'atténuation doivent porter sur les données avant leur décompression

Lorsque les mises à jour ne peuvent pas être appliquées immédiatement, les mesures documentées visent à empêcher les données Brotli non fiables d'atteindre le décodeur. Elles consistent notamment à rejeter les requêtes entrantes Content-Encoding: br avant toute décompression, à désactiver le décodage automatique des réponses Brotli lorsque la fonctionnalité le permet, ou à supprimer les paquets Brotli et brotlicffi de Python afin que les clients reviennent à gzip et deflate.

Retirer br de Accept-Encoding ne suffit pas : un serveur peut toujours renvoyer du contenu compressé en Brotli. La protection par pare-feu présente aussi des limites. Vercel a indiqué que ses règles du jour de divulgation ne couvraient pas les réponses que les fonctions récupèrent auprès d'autres serveurs. Le rapport indique qu'aucun contournement Node.js n'a été publié, ce qui fait de la mise à jour de l'environnement d'exécution le correctif recommandé.

Pour cdxgen, les mainteneurs recommandent en outre de restreindre les destinations avec CDXGEN_ALLOWED_HOSTS, de définir COCOA_FULL_SCAN=false pour ignorer le téléchargement distant des podspecs, et de maintenir le mode serveur hors de portée des clients non fiables. L'utilisation d'un hôte Node.js corrigé avec le paquet npm constitue une autre option documentée.

Après la mise à jour, les services doivent être redémarrés et les images de conteneurs reconstruites pour remplacer le décodeur dans les processus en cours d'exécution. Les outils d'analyse des dépendances Python peuvent accuser un retard : le rapport indique que l'avis GitHub ne comportait pas d'entrées de paquets concernés, tandis que PYSEC-2026-4322 et PYSEC-2026-4323 ont été ajoutés le 23 octobre. Les versions installées méritent donc une vérification manuelle.

Le correctif lui-même est antérieur à la divulgation. OpenAI, dont l'équipe Codex Security a signalé la vulnérabilité, a indiqué que la modification sous-jacente était entrée dans le code source de Brotli le 27 février, sans être reconnue comme un correctif de sécurité. Aucune version de Brotli ne l'a intégrée avant le 21 octobre.

À lire aussi

Sources

Cet article est une réécriture originale fondée sur les sources ci-dessous.

CVE traitées dans cet article

Retour à l'accueil

Dernières actualités cybersécurité

Toutes les actualités cybersécurité →