Ce qui se passe
La fiche du 22 octobre rangeait CVE-2026-111497, dans le décodeur Brotli
embarqué par Node.js, parmi les cinq failles hautes de la publication de sécurité
du 21 octobre, sans exploitation décrite. Les chercheurs d'Imperva viennent de
montrer qu'elle mène à une exécution de code. Leur démonstration, baptisée
Node2Shell, a lancé du code sur l'image officielle Node.js 24.22.0 pour
Linux arm64, sans débogueur ni build modifié, en envoyant des données Brotli
forgées au décodeur.
Ce n'est pas la première démonstration publique, mais la précédente ne fonctionnait que sur une version de test volontairement affaiblie. Sur une version standard, son auteur n'obtenait qu'un plantage et une lecture limitée de la mémoire du processus.
Comment le bug fonctionne
Un flux Brotli annonce, au fil du décodage, les types de blocs qu'il va utiliser. Les données d'Imperva atteignent un changement de bloc que la structure du flux rend impossible. Le décodeur vulnérable prend ce cas pour une demande de données supplémentaires et continue dans un état invalide. Avec un détecteur d'erreurs mémoire, Imperva constate alors une écriture au-delà du tampon prévu : c'est l'écriture hors limites de la CVE.
Node.js a repris un correctif du projet amont google/brotli : le décodeur s'arrête désormais sur une erreur de format à cet endroit. Sur la version corrigée, 24.22.1, les mêmes données sont rejetées et aucun code ne s'exécute.
Qui est exposé
Le décodeur est celui que Node embarque, donc les lignes 22.x, 24.x et 26.x sont concernées, pas seulement la version testée. Il faut qu'une donnée Brotli non fiable l'atteigne, par deux chemins :
- une réponse lue avec
fetch(); - un corps de requête décodé par un intergiciel. Les parseurs d'Express 5
(
express.json(),express.urlencoded(),express.text(),express.raw()) décodent désormais le Brotli, au même titre que gzip et deflate. Un serveur HTTP Node nu, lui, ne décode rien tout seul.
Imperva a reproduit l'exécution de code par les deux chemins sur Express 5.0.0 à 5.3.0 et body-parser 2.0.0 à 2.3.0, versions épinglées, sans tester chaque version intermédiaire.
Ce qu'il ne faut pas en conclure
- La démonstration a demandé plusieurs essais sur arm64 : elle vaut pour cette configuration. Les autres architectures et les lignes 22.x et 26.x n'ont pas été testées.
- Aucune exploitation dans la nature n'était signalée au 22 octobre.
Comment s'y prendre
- Installer 24.22.1, 22.23.4 ou 26.12.1, publiées le 21 octobre 2026.
- Reconstruire les images Docker et tout artefact qui embarque un binaire Node : un inventaire de paquets ne le voit pas.
- Quitter les lignes en fin de vie : la 20.x et les précédentes ne recevront pas de correctif.
- Compter sur la mise à jour, pas sur un contournement : l'avis n'en liste aucun. Imperva conseille de limiter le trafic Brotli non fiable sur les chemins exposés quand c'est possible, et précise que seule la mise à jour supprime la faille. Vercel a ajouté le 21 octobre des règles qui bloquent l'attaque dans les requêtes entrantes ; elles ne couvrent pas les réponses Brotli que l'application va chercher ailleurs.
Source : The Hacker News, 23 octobre 2026. Source en anglais. Compléments cités par l'article : Imperva, avis Node.js, bulletin Vercel.