Une vulnérabilité récemment mise en lumière affecte la bibliothèque de décompression Brotli, largement utilisée pour réduire le poids des pages web. Baptisée Brotli2Shell – après plusieurs dénominations intermédiaires – elle expose les applications clientes à un risque d’exécution de code arbitraire, même si aucune attaque massive n’a encore été observée.

Un problème de gestion de contexte dans le décodeur

Le décodeur Brotli travaille avec trois catégories de blocs, chacune pouvant basculer entre différents sous‑modèles statistiques. Lorsqu’un bloc arrive à expiration, le décodeur invoque une fonction qui indique si le changement de type de bloc est possible. Cette fonction ne renvoie qu’un booléen : vrai ou faux.

En pratique, si le flux d’entrée demande un type de bloc impossible, le décodeur interprète l’échec comme un flux incomplet, faute d’un code d’erreur plus précis. Il continue alors à écrire des octets dans un tampon fixe de petite taille. L’écriture hors limites finit par écraser des métadonnées internes, ouvrant la porte à une primitive de lecture arbitraire et, potentiellement, à un détournement du flux d’exécution.

Le correctif de Google

Google, qui maintient la référence C de Brotli, a intégré un code d’erreur explicite à la fin du mois de février. Ce correctif bloque le processus dès qu’un changement de bloc illégal est détecté. Cependant, la version corrigée n’a pas été publiée sous forme de tag officiel ; la dernière release officielle reste datée d’octobre 2025. Ainsi, les projets qui ne recompilent pas depuis la branche principale restent exposés.

Qui est concerné ?

Contrairement aux premières hypothèses qui pointaient vers Node.js (d’où le nom Node2Shell), la faille ne se limite pas à un runtime particulier. Elle touche l’implémentation C de référence de Brotli, ce qui implique tous les environnements qui l’intègrent, que ce soit via des bibliothèques natives ou des wrappers.

Le vecteur d’attaque principal se situe côté client. La plupart des serveurs ne décompressent pas les requêtes entrantes, mais les navigateurs et les bibliothèques HTTP qui consomment des URLs – aperçus de liens, webhooks, import de fichiers – peuvent recevoir des réponses spécialement craftées contenant du contenu Brotli malformé.

Des projets comme 7‑zip, Bun, ClickHouse, Envoy, Firefox, Istio ou encore les produits Mozilla ont déjà publié des correctifs. D’autres, comme Apache Arrow et DuckDB, sont en cours de mise à jour.

Mesures d’atténuation

Pour les environnements qui ne peuvent pas appliquer immédiatement le correctif, deux stratégies simples sont recommandées :

  • Désactiver la décompression automatique du format Brotli dans les clients HTTP.
  • Refuser, au niveau du frontal, les requêtes incluant l’en‑tête Content‑Encoding: br.

Ces mesures limitent l’exposition sans impacter les performances des sites qui utilisent déjà le format pour la réponse du serveur.

Une réflexion plus large sur le code C

Brotli2Shell rejoint d’autres vulnérabilités récentes, comme PHP2Shell, qui ont ravivé le débat autour de la migration des bibliothèques critiques du C vers des langages à sécurité renforcée, comme Rust. Dropbox a d’ailleurs porté son implémentation Brotli en Rust, mais a admis un compromis en matière de performance.

En chiffres

Selon W3Techs, environ 38,4 % des sites web utilisent la compression Brotli, contre près de 70 % qui s’appuient sur PHP. La proportion n’est pas négligeable : des millions de pages peuvent être concernées.

En l’absence d’exploitation confirmée, la communauté reste vigilante. Les PoC circulent, mais ciblent des configurations volontairement affaiblies. La situation illustre l’importance de suivre les correctifs upstream et de ne pas se reposer uniquement sur les mises à jour de paquets système.

La prochaine étape pour les développeurs sera de vérifier que leurs dépendances Brotli proviennent d’une version contenant le nouveau code d’erreur, ou de migrer vers une implémentation Rust lorsqu’elle sera disponible, afin de réduire la surface d’attaque liée à ce type de dépassement de tampon.

Une lecture à partager ?
Partager
Partager cet article
WhatsApp ↗LinkedIn ↗Facebook ↗X ↗E-mail ↗

POUR CONTINUER

Garder le fil.

Toutes les actus ↗