veilletech.fr
25 oct. Feed du jour
#01 SÉCURITÉ Faille

Brotli : Python, Bun et Envoy aussi exposés

Votre scanner de dépendances ne voit pas encore ce paquet Python.

La faille CVE-2026-111497 du décodeur Brotli de Google ne concerne pas que Node.js : Bun, Envoy, Istio et les paquets Python Brotli et brotlicffi embarquent la même copie vulnérable, et chacun doit être mis à jour séparément. En Python, les clients HTTP décodent le Brotli dès qu'un des deux paquets est installé, et pip-audit ou Dependabot ne le signalent pas encore.

3 min de lectureintermédiairevidéo 1:18
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Qui est touché
  3. Le piège Python
  4. Comment s'y prendre
  5. Ce qu'il ne faut pas en conclure
  6. À retenir

Ce qui se passe

Les fiches des 22 et 24 octobre suivaient CVE-2026-111497 côté Node.js. Le défaut est pourtant dans le décodeur Brotli de Google, une bibliothèque C (versions 1.0.3 à 1.2.0) : un flux compressé forgé fait écrire au-delà d'un tampon, ce qui peut planter le programme, révéler de la mémoire ou exécuter du code. Chaque logiciel embarque sa propre copie du décodeur et doit donc publier son propre correctif.

Le correctif amont figurait dans le code de Brotli depuis le 27 février, sans que l'on sache alors qu'il fermait une faille ; aucune version ne l'a livré avant le 21 octobre. L'équipe Codex Security d'OpenAI (Khai Tran, Sylvie Mayer) a signalé la faille. Google la note 9,2 (CVSS 4.0, critique), Node.js « haute », Red Hat 8,1.

Qui est touché

Produit Touché Corrigé Exposé quand
Brotli (bibliothèque C) 1.0.3 à 1.2.0 1.0.10, 1.1.1, 1.2.1 du Brotli non fiable est décodé
Node.js 22.x, 24.x, 26.x avant correctif ; 20.x et antérieures (fin de vie) 22.23.4, 24.22.1, 26.12.1 fetch() d'une réponse br, ou corps br via Express ou body-parser
Bun 1.4.3 et antérieures 1.4.4 fetch() d'une réponse br, ou node:zlib
Envoy 1.39.2, 1.38.5, 1.37.7, 1.36.11 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 décompresseur Brotli configuré
Istio 1.31.0 à 1.31.1, 1.30.0 à 1.30.5, 1.29.0 à 1.29.8 1.31.2, 1.30.6, 1.29.9 décompression Brotli activée
Python Brotli 1.2.0 et antérieures 1.2.1 paquet installé, client HTTP qui décode br
Python brotlicffi 1.2.0.x et antérieures 1.2.1.0 idem
cdxgen (binaires et images) 13.4.0 et 12.8.8 et antérieures 13.5.0, 12.8.9 analyse d'entrées non fiables

Debian 13 (trixie) a corrigé son paquet brotli le 23 octobre (1.1.0-2+deb13u1) ; Amazon Linux 2023 listait encore ses paquets brotli et Node.js 24 en attente au 22 octobre.

Le piège Python

Il suffit que Brotli ou brotlicffi soit installé : requests, urllib3, httpx et aiohttp décodent alors le Brotli d'eux-mêmes, sans que votre code l'importe. Et le piège est double : la fiche CVE nomme le dépôt Google, pas les paquets PyPI, et l'avis GitHub ne liste aucun paquet touché, ce que lit Dependabot. Selon Aikido, pip-audit, Dependabot et Safety ne signalaient rien au 23 octobre. Les entrées PYSEC-2026-4322 (Brotli) et PYSEC-2026-4323 (brotlicffi) existent depuis le 23 octobre : vérifiez les versions à la main.

Comment s'y prendre

  1. Chercher les paquets, dans chaque environnement et chaque image :

    Terminal
    pip freeze | grep -i brotli
  2. Mettre à jour, puis redémarrer et reconstruire les images : un processus en cours garde l'ancien décodeur.

    Terminal
    pip install -U "Brotli>=1.2.1" "brotlicffi>=1.2.1.0"
  3. Impossible de mettre à jour ? Désinstaller Brotli et brotlicffi (et les extras comme httpx[brotli]) : les clients retombent sur gzip et deflate, mais un serveur qui envoie du br quand même peut produire une réponse illisible.

  4. Refuser les requêtes entrantes Content-Encoding: br au proxy, avant tout décodage, et rejeter les réponses br côté client avant qu'elles soient décodées.

Retirer br de Accept-Encoding ne suffit pas : un serveur malveillant en envoie quand même, et urllib3 choisit son décodeur d'après l'en-tête de la réponse. Les règles de pare-feu de Vercel, elles, ne couvrent pas « les réponses que vos fonctions vont chercher ailleurs ».

Ce qu'il ne faut pas en conclure

Une exécution de code n'est démontrée que sur Node.js 24.22.0 (Imperva), pas sur Bun, Envoy ni Python. Aucune attaque réelle n'est signalée ; l'évaluation de la CISA du 23 octobre note l'exploitation « none ».

Source : The Hacker News, 24 octobre 2026. Source en anglais. Compléments : Aikido, avis Node.js, OpenAI.