Aikido

Node2Shell : une vulnérabilité Brotli dans Node.js permet l'exécution de code à distance (CVE-2026-111497)

Écrit par
Sooraj Shah

TL;DR

Node.js a publié mercredi une mise à jour de sécurité concernant une faille liée à la manière dont il décompresse les données Brotli, un bug que l'on appelle déjà « Node2Shell » (CVE-2026-111497). Si un attaquant parvient à injecter une charge utile malveillante dans votre application, cette faille peut provoquer le plantage du processus, entraîner une fuite d'une partie de sa mémoire ou, potentiellement, lui permettre d'exécuter son propre code.

Qui est concerné : toute personne utilisant Node.js ou Bun dont l'application décompresse des données Brotli qu'un attaquant pourrait contrôler.

Solution : passez à la version corrigée de Node.js correspondant à votre branche de version

  • 22.x → 22.23.4
  • 24.x → 24.22.1
  • 26.x → 26.12.1

Pour Bun, effectuez la mise à jour vers la version 1.4.4 ou une version plus récente.

Comment « Aikido » peut vous aider : Aikido détecte la vulnérabilité et vous indique quels dépôts et quelles images de conteneurs utilisent encore une version vulnérable.

Qui est concerné par la vulnérabilité CVE-2026-111497 ?

Si vous utilisez Node.js, partez du principe que vous êtes concerné jusqu'à ce que vous ayez vérifié votre version. Toutes les branches de versions prises en charge présentaient cette faille avant la mise à jour du 21 octobre, et Bun en était également affecté jusqu'à la version 1.4.4.

Votre niveau d'exposition dépend de la source d'où proviennent les données compressées de votre application. Brotli est un format de compression utilisé par les serveurs et les clients pour réduire le trafic Web, et la vulnérabilité peut être exploitée lorsque Node.js décompresse des données Brotli contrôlées par un attaquant. Cela peut se produire de trois façons au moins :

  • Serveurs acceptant les requêtes : Express 5 et Body-Parser 2.x décompresse les corps de requête envoyés avec Content-Encoding : br, et n'importe quel client peut en envoyer un. Un serveur HTTP Node.js « nu » ne décode pas de lui-même les corps de requêtes Brotli entrants.
  • Applications qui font appel à d'autres serveurs : fetch() décompresse automatiquement les réponses Brotli, ce qui permet à un serveur contrôlé ou compromis par un attaquant d'accéder à votre application via sa réponse. Les webhooks et autres fonctionnalités qui appellent des URL fournies par l'utilisateur constituent les cibles les plus courantes.
  • Code qui utilise nœud : zlib directement : toute entrée non fiable transmise à ses fonctions Brotli. De nombreux autres frameworks serveur sur lesquels reposent les applications s'en chargeront pour vous.
Ligne de libérationStatutVersion corrigée
Node.js 26.xActuel26.12.1
Node.js 24.xAssistance à long terme24.22.1
Node.js 22.xAssistance à long terme22.23.4
Node.js 25.x, 23.x, 20.x et versions antérieuresFin de viePas de solution

Comment corriger la vulnérabilité CVE-2026-111497

La solution consiste à mettre à jour Node.js, ce qui se fait en quatre étapes :

  1. Vérifiez votre version à l'aide de node --version sur les ordinateurs portables, les environnements d'exécution CI, les serveurs et au sein des conteneurs.
  2. Effectuez la mise à jour vers la version 22.23.4, 24.22.1 ou 26.12.1, ou vers une version de correctif plus récente de la même série.
  3. Recompilez et redéployez vos images de conteneurs. Une image associée à une balise antérieure, telle que nœud : 22.23.3-alpine, reste vulnérable jusqu'à ce que vous le réinstalliez sur une version corrigée.
  4. Prévoyez de migrer depuis les versions 25.x, 23.x, 20.x et antérieures de Node.js. Ces versions ont atteint leur fin de vie et ne bénéficieront pas de ce correctif.

Les plateformes gérées qui intègrent leur propre moteur d'exécution Node.js peuvent accuser un retard par rapport à la version en amont ; vérifiez donc quelle version utilise votre fournisseur. Si vous ne pouvez pas effectuer la mise à jour dès aujourd'hui, consultez les solutions provisoires ci-dessous. Les utilisateurs de Bun doivent passer à la version 1.4.4 ou une version plus récente de Bun, qui inclut le correctif. L'équipe Bun a suivi ce problème dans l'issue 46352 du dépôt oven-sh/bun.

Si votre installation de Node.js provient d'un paquet de distribution Linux tel que Debian, Ubuntu, Fedora, RHEL ou Alpine, il se peut qu'elle utilise la bibliothèque Brotli du système plutôt que celle fournie par Node.js. Dans ce cas, le correctif est disponible via le paquet Brotli de votre distribution ; veuillez donc consulter l'avis de sécurité de votre distribution ainsi que le numéro de version.

Comment « Aikido » permet de remédier à la vulnérabilité CVE-2026-111497

Aikido détecte cette vulnérabilité et signale les versions de Node.js concernées dans vos dépôts et vos images de conteneurs. Votre tableau de bord indique quels services utilisent encore un environnement d’exécution vulnérable ; vous pouvez ainsi mettre à jour en priorité ceux qui interrogent des serveurs externes ou acceptent des corps de requêtes compressés. Une fois la mise à jour effectuée, une nouvelle vérification via Aikido confirme que la vulnérabilité a disparu.

Détails techniques de Node2Shell

Qu'est-ce que Node2Shell (CVE-2026-111497) ?

La vulnérabilité CVE-2026-111497 correspond à une écriture hors limites dans le décodeur Brotli, provoquée par des données compressées mal formées. En termes simples, le décodeur peut être amené à écrire des données au-delà de la fin d'un tampon mémoire, ce qui constitue une voie classique menant à des plantages et à l'exécution de code. Node.js lui attribue un niveau de gravité élevé et décrit son impact comme une exécution de code à distance.

Brotli est la bibliothèque de compression de Google, et Node.js intègre sa propre version. La faille se trouve dans ce code intégré ; pour la corriger, il faut donc mettre à jour le runtime Node.js lui-même. Node.js exécute le décodeur chaque fois qu’il décompresse des données Brotli, soit directement via le nœud : zlib module ou automatiquement lorsque fetch() reçoit une réponse envoyée avec la compression Brotli.

La correction consiste en un correctif en amont issu du projet Brotli, dont Node.js a sélectionné certains éléments (Commit Brotli 0ed4268a (depuis février). Cela permet au décodeur de détecter les données d'entrée non valides et de s'arrêter avant d'écrire au-delà de la taille du tampon. Ce correctif a été intégré dans les versions 1.2.1, 1.1.1 et 1.0.10 de Brotli ; par conséquent, les autres logiciels intégrant Brotli pourraient également nécessiter une mise à jour.

Quelle est la gravité de la vulnérabilité CVE-2026-111497, et fait-elle l'objet d'exploits ?

Node.js classe cette faille comme présentant un niveau de gravité « élevé », soit un cran en dessous du niveau « critique », et les recherches menées par la communauté ont progressé rapidement. Une première preuve de concept, publiée le 22 octobre, n’a permis l’exécution de code que sur une version de test délibérément affaiblie. Le même jour, des chercheurs en sécurité ont signalé une exécution de code sur l’image officielle et non modifiée de Node.js 24.22.0 sous Linux arm64, bien que leur exploit n’ait pas fonctionné à chaque tentative et que Node.js 24.22.1 rejette la même entrée. Selon The Hacker News, aucune exploitation en milieu réel n’avait été signalée au 22 octobre.

Considérez tout de même cela comme urgent. Le bogue est une faille de sécurité liée à la gestion de la mémoire dans un composant d'exécution qui traite des données réseau non fiables ; des démonstrations de principe publiques existent, et le correctif consiste simplement en une mise à jour de version. Les services qui appellent des serveurs externes ou acceptent des corps de requêtes compressés doivent être traités en priorité.

Comment vérifier si votre application est exposée

  1. Énumérez toutes les versions de Node.js que vous utilisez : node --version sur les hôtes et les exécuteurs CI, et docker run --rm <image> node --version pour chaque image de conteneur. Un inventaire des paquets peut ne pas détecter un environnement d'exécution intégré à une image.
  2. Identifiez à quel endroit les données Brotli sont intégrées. Exécutez npm ls express body-parser pour détecter Express 5 et Body-Parser 2.x, et rechercher dans votre code (et vos dépendances) les éléments suivants : brotliDecompress et createBrotliDecompress depuis nœud : zlib.
  3. Répertorier les envois sortants fetch() les appels dirigés vers des serveurs que vous ne contrôlez pas, y compris les envois via webhooks et les URL fournies par les utilisateurs.
  4. Commencez par mettre à niveau les services correspondant aux étapes 2 ou 3, puis passez aux autres.

Un fichier Dockerfile épinglé à nœud : 24.22.0 reste vulnérable, quel que soit le nombre de fois où vous le reconstruisez. Mettez à jour le pin vers la version 24.22.1 ou une version ultérieure.

Que faire si vous ne pouvez pas encore effectuer la mise à jour ?

L'avis de sécurité Node.js ne propose aucune solution de contournement pour la faille Brotli. Ces mesures provisoires permettent de réduire l'exposition pendant que vous préparez la mise à jour :

  • Rejeter les requêtes encodées en Brotli : ignorer les requêtes entrantes contenant Content-Encoding : br au niveau de votre proxy inverse, de votre équilibreur de charge ou de votre middleware d'application. Aikido a utilisé cette solution provisoire pour les services internes qui ne pouvaient pas être mis à niveau immédiatement.
  • Utilisez les règles de périphérie lorsque votre plateforme les propose : Vercel a ajouté, le 21 octobre, des règles de pare-feu qui bloquent cette attaque au niveau des requêtes entrantes.

Aucune de ces solutions provisoires ne couvre les réponses Brotli que votre application récupère depuis d'autres serveurs. Seule une mise à jour en cours d'exécution permet de corriger cette faille ; considérez donc ces solutions provisoires comme une transition vers celle-ci.

Chronologie de Node2Shell

  • Février 2026 : le correctif est intégré pour la première fois au code source de Brotli.
  • 21 octobre 2026 : Node.js publie les versions 22.23.4, 24.22.1 et 26.12.1. Brotli intègre le même correctif dans ses versions 1.2.1, 1.1.1 et 1.0.10, et Vercel ajoute des règles de pare-feu pour les requêtes entrantes.
  • 22 octobre 2026 : une démonstration publique de faisabilité est publiée, et des chercheurs signalent l'exécution de code sur une version non modifiée de Node.js 24.22.0.

FAQ

Qu'est-ce que Node2Shell ?

« Node2Shell » est le nom qui circule sur Internet pour désigner la vulnérabilité CVE-2026-111497, une faille du décodeur Brotli dans Node.js qui, selon l'équipe du projet Node.js, pourrait permettre l'exécution de code à distance.

Quelles versions de Node.js corrigent la vulnérabilité CVE-2026-111497 ?

Node.js 22.23.4, 24.22.1 et 26.12.1, ainsi que toute version corrective plus récente de ces séries. Les versions Node.js 25.x, 23.x, 20.x et antérieures ont atteint leur fin de vie et ne bénéficient plus de correctifs.

La vulnérabilité CVE-2026-111497 fait-elle l'objet d'exploits ?

Aucune exploitation en conditions réelles n'avait été signalée au 22 octobre 2026. Des chercheurs ont signalé l'exécution de code sur une version non modifiée de Node.js 24.22.0 en conditions de laboratoire, et l'exploitation n'a pas fonctionné à chaque tentative.

Est-ce que « body-parser » ou express.json() Cela rendrait-il mon serveur vulnérable ?

Oui, si votre analyseur décompresse les corps de requête Brotli. C'est le cas d'Express 5 et de body-parser 2.x ; un client peut donc envoyer une requête spécialement conçue Content-Encoding : br demande. La solution consiste à mettre à jour Node.js.

Existe-t-il une solution de contournement ?

L'avis de sécurité concernant Node.js n'en mentionne aucune. Le rejet des requêtes encodées en Brotli au niveau de la périphérie réduit l'exposition entrante, mais ne protège pas contre les réponses encodées en Brotli récupérées par votre application.

Est-ce que Bun est concerné ?

Oui, les versions antérieures à la 1.4.4 sont concernées. La version 1.4.4 de Bun inclut le correctif, et l'équipe Bun a suivi ce problème dans le ticket n° 46352 du dépôt oven-sh/bun.

Partager :

https://www.aikido.dev/blog/node2shell-nodejs-brotli-rce-cve-2026-111497

Analyser les malwares

Commencer gratuitement
4,7/5
Fatigué des faux positifs ?
Essayez Aikido, comme 100 000 autres.
Commencez maintenant
Obtenez une démonstration personnalisée

Approuvé par plus de 100 000 équipes

Réserver maintenant
Analysez votre application à la recherche d'IDORs et de chemins d'attaque réels

Approuvé par plus de 100 000 équipes

Démarrer l'analyse
Découvrez comment le pentest IA teste votre application

Approuvé par plus de 100 000 équipes

Démarrer les tests

Sécurisez vos systèmes dès aujourd'hui,
rapidement et gratuitement.

Sécurisez votre code, votre cloud et votre runtime au sein d'un système centralisé.
Connectez un dépôt pour découvrir ce que les agents de raisonnement trouvent dans votre base de code.

Aucune carte bancaire requise | Résultats de l'analyse en 32 secondes.
Utilisé par plus de 150 000 organisations