Node2Shell : vulnérabilité critique de sécurité Node.js – trouver et corriger les logiciels affectés
Ce texte a été généré par l'intelligence artificielle (IA).Stand: 23 octobre 2026, 10:30 CEST – Des mises à jour sont disponibles, un proof of concept est public. Aucune exploitation active n'a été signalée jusqu'au 22 octobre 2026. Ceux qui exploitent des applications Node.js devraient tout de même mettre à jour maintenant.
Node2Shell est une vulnérabilité critique de sécurité dans Node.js avec l'identifiant CVE-2026-111497. Elle se trouve dans le décodeur Brotli, que Node.js utilise pour décompresser des données compressées. Des données Brotli préparées peuvent écraser de la mémoire et, dans le pire des cas, exécuter du code sans que les attaquants n'aient besoin de se connecter. La faille est corrigée dans Node.js 22.23.4, 24.22.1 et 26.12.1, publiés le 21 octobre 2026.
Le nom Node2Shell provient d'une analyse du fournisseur de sécurité Imperva. Dans l'évaluation, il y a deux interprétations : Le projet Node.js classifie la vulnérabilité comme „ High “ (élevé) ; l'entrée CVE, que Google a attribuée en tant qu'éditeur de la bibliothèque Brotli, l'évalue avec CVSS 9.2 selon CVSS v4.0 („ Critical “, critique).
Proof of Concept : public, exécution de code prouvée uniquement en laboratoire ; exploitation active non signalée jusqu'au 22.10.
Patch disponible depuis : 21.10.2026
Solution de contournement officielle : aucune
Chronologie : Ce qui s'est passé jusqu'à présent.
21 octobre 2026 : Node.js publie des mises à jour de sécurité pour toutes les lignes de version prises en charge avec un total de dix corrections de sécurité. Le même jour, les versions Brotli 1.2.1, 1.1.1 et 1.0.10 sont publiées, et Vercel active des règles de pare-feu pour les demandes entrantes. La vulnérabilité a été signalée selon l'avis Node.js par OpenAI Codex Security. Le même jour, le projet PHP clôt également les vulnérabilités critiques sur PHP2Shell; OpenAI Codex Security a également participé à leur découverte.
22 octobre 2026 : L'entrée CVE est publiée (CVSS 9.2). Imperva démontre l'exécution de code contre l'image officielle Node.js-24.22.0. Un proof of concept séparé devient public, atteignant l'exécution de code mais seulement sur un build de test intentionnellement affaibli. Bun comble la vulnérabilité avec la version 1.4.4.
Quel logiciel est affecté par Node2Shell ?
La vulnérabilité se trouve dans Node.js lui-même, plus précisément dans la bibliothèque Brotli fournie par Node.js. Une mise à jour de packages npm individuels ne la comble donc pas. Cela dépend de l'environnement d'exécution Node.js et, pour Node.js à partir de paquets de distribution, de leur paquet Brotli.
Une application est mise en danger si elle décompresse des données Brotli provenant d'une source non fiable. Les principales voies d'accès sont :
Demandes entrantes avec Express 5 ou body-parser 2.x : Ces versions décompressent les corps de requête avec Content-Encoding : br automatiquement. Imperva a reproduit l'exécution de code avec Express 5.0.0 et 5.3.0 ainsi que body-parser 2.0.0 à 2.3.0 ; chaque version intermédiaire n'a pas été testée individuellement.
Récupérations sortantes avec fetch(): La fonction intégrée dans Node.js décompresse automatiquement les réponses Brotli. Un serveur contrôlé ou compromis par des attaquants peut ainsi atteindre l'application. Des cas typiques incluent les webhooks, les aperçus de lien et les fonctions où l'utilisateur spécifie une URL.
Utilisation directe de node:zlib: Applications et bibliothèques qui décompressent des données Brotli provenant d'une source non sécurisée avec brotliDecompress ou createBrotliDecompress décompresser.
Un simple serveur HTTP avec le module Node.js http Il n'extrait pas les corps Brotli entrants par lui-même. Il est toutefois concerné dès que l'application utilise l'un des moyens mentionnés.
D'autres logiciels peuvent également être concernés, qui intègrent le décodeur Brotli dans les versions 1.0.3 à 1.2.0 et qui extraient des données d'une source non sécurisée. L'environnement d'exécution JavaScript Bun a été concerné jusqu'à la version 1.4.3.
Exploitation Node2Shell : Ce que les attaquants peuvent réaliser
Exécuter du code : Selon l'entrée CVE, les attaquants peuvent, sans authentification, corrompre la mémoire du décodeur via un flux de données Brotli préparé et éventuellement exécuter du code arbitraire. Le code s'exécute ensuite dans le contexte du processus Node.js.
Lecture de la mémoire : La divulgation des contenus de mémoire du processus est également possible selon l'entrée CVE.
Paralyser le service : Un crash du processus à cause d'une entrée préparée est au moins possible.
Imperva a démontré l'exécution de code contre l'image Linux-arm64 officielle de Node.js 24.22.0, sans débogueur et sans programme modifié, à la fois via fetch() et via des corps de requête dans Express. L'attaque n'a pas réussi à chaque tentative. Node.js 24.22.1 a rejeté les mêmes entrées. Un proof of concept public séparé a atteint l'exécution de code selon The Hacker News uniquement sur une version de test intentionnellement affaiblie ; sur une version normale, cela a entraîné un crash et une lecture limitée de la mémoire du processus.
Une exploitation active n'a pas été signalée avant le 22 octobre 2026. Le vecteur CVSS indique également des prérequis d'attaque. En pratique, cela signifie : l'application doit extraire des données Brotli d'une source non sécurisée.
Trouver les systèmes Node.js concernés dans l'inventaire
Pour patcher rapidement, il faut d'abord savoir où Node.js fonctionne. Le runtime se trouve souvent à des endroits qui n'apparaissent dans aucun inventaire de serveur : dans des images Docker, des CI-Runners, des fonctions Serverless, des outils internes, des serveurs de construction et des appareils avec runtime intégré.
Comment vérifier la version de Node.js ?
Sur le serveur : node –version affiche la version installée. Si une application fonctionne avec un binaire propre (par exemple via nvm ou dans un sous-dossier), cette version doit être vérifiée.
Dans Docker : docker run –rm node –version. Une image fixée à une ancienne version comme node:24.22.0 reste vulnérable, même si elle est reconstruite. Le tag doit pointer vers une version patchée.
Dans le code : npm ls express body-parser montre si Express 5 ou body-parser 2.x est utilisé. Une recherche de brotliDecompress et createBrotliDecompress dans le code propre et dans les dépendances indique une utilisation directe de Brotli.
De l'extérieur : les applications Express se trahissent souvent par l'en-tête HTTP X-Powered-By : Express. L'absence de l'en-tête ne signifie pas qu'il n'y a pas de Node.js en cours d'exécution.
Node.js à partir de paquets Linux
Les binaires officiels de Node.js et les images Docker officielles apportent leur propre copie de Brotli ; ici, la mise à jour de Node.js comble la lacune. Les distributions comme Debian construisent en revanche Node.js contre la bibliothèque Brotli du système. La correction est apportée par le paquet Brotli de la distribution, même pour les anciennes lignes de Node.js comme 18.x et 20.x, que Debian continue de livrer. Le Dépôt de sécurité Debian indique brotli (bookworm, trixie, forky, sid) et les paquets dépendants nodejscomme vulnérables au 23 octobre 2026, un correctif n'y est pas encore enregistré. Pour d'autres distributions, il convient de se référer à leur avis respectif.
Fermer la vulnérabilité de Node.js : Que faire maintenant
Sur Mettre à jour Node.js vers 22.23.4, 24.22.1 ou 26.12.1 ou une version plus récente, y compris sur les CI-Runner et serveurs de build.
Passer aux images Docker à une version patchée et reconstruire ; redistribuer les applications avec l'exécutable Node.js intégré.
Pour Node.js à partir des paquets de distribution, mettre à jour le paquet Brotli de la distribution dès qu'il est disponible.
Mettre à jour Bun vers la version 1.4.4 ou plus récente.
Node.js 25.x, 23.x, 20.x et antérieurs provenant de sources officielles : Ces lignes ont atteint leur fin de vie et ne reçoivent plus de mises à jour du projet Node.js. Migrer les applications concernées vers une version prise en charge.
Après la mise à jour, redémarrer tous les processus Node.js, par exemple via le gestionnaire de processus ou en redémarrant les conteneurs.
Dans les plateformes et services hébergés, demander si l'environnement d'exécution a déjà été mis à jour.
Mesures de transition si la mise à jour n'est pas encore possible
L'avis de Node.js ne mentionne aucun contournement. Cependant, certains vecteurs d'attaque peuvent être limités jusqu'à la mise à jour :
Rejeter les requêtes avec Content-Encoding : br au niveau du proxy inverse, de l'équilibreur de charge ou dans le middleware, si l'application n'a pas besoin de corps de requête compressés avec Brotli. Cela protège uniquement les requêtes entrantes.
Désactiver temporairement les fonctions qui récupèrent des données de serveurs étrangers ou spécifiés par l'utilisateur, ou rejeter les réponses avec fetch() de tels serveurs. Content-Encoding : br von solchen Servern verwerfen.
Firewalls d'applications Web : certains fournisseurs ont publié des règles, comme Vercel pour les requêtes entrantes sur sa plateforme. Les réponses Brotli, que l'application récupère même depuis d'autres serveurs, ne couvrent pas ces règles.
Aucune de ces mesures ne remplace la mise à jour de l'environnement d'exécution.
Comment reconnaître une attaque ?
Il n'existe à ce jour aucun indicateur d'attaque fiable. Les chercheurs mentionnent comme indices pour une priorisation :
des plantages inattendus de processus Node.js lors du déballage de données,
des messages d'erreur du décodeur Brotli dans les journaux.
Selon leur évaluation, aucun des deux ne constitue une preuve fiable d'exploitation. Quiconque trouve des signes de compromission doit supposer que les identifiants, les jetons et les clés du processus concerné peuvent être affectés, et les remplacer.
D'autres vulnérabilités dans la même mise à jour Node.js
La mise à jour de sécurité du 21 octobre corrige, en plus de Node2Shell, neuf autres failles, dont trois également évaluées à „ élevées “ :
CVE-2026-105482 :dns.resolve tronque les noms d'hôte contenant un caractère NUL.
CVE-2026-105483 : contournement de la vérification des noms d'hôte TLS pour les adresses IP en chiffres pleins.
CVE-2026-106069 : contournement de la vérification des noms d'hôte TLS lorsque le nom d'hôte est résolu en toute générosité en une adresse IP.
Trois autres failles sont classées „ moyennes “, dont des valeurs aléatoires répétées de crypto.randomUUID() dans des snapshots de démarrage et des applications exécutables uniques, et trois sont classées „ faibles “, dont deux contournements du modèle de permissions. De plus, la mise à jour actualise entre autres OpenSSL, c-ares et undici.
Contexte DACH et européen
L'application rapide des mises à jour de sécurité est l'une des mesures de gestion des risques pour les établissements relevant du champ d'application de la directive NIS-2 selon l'art. 21 de la directive NIS-2. En cas d'incident de sécurité majeur dû à l'exploitation de Node2Shell, les obligations de déclaration s'appliquent selon l'art. 23 de la directive NIS-2, en Allemagne selon le § 32 BSIG. En Autriche et en Suisse, les obligations de déclaration nationales respectives s'appliquent.
Comment LocateRisk s'attaque aux actifs exposés
LocateRisk rend visibles les systèmes accessibles de l'extérieur et les logiciels identifiables de l'extérieur. Pour Node2Shell, cela aide à trouver des applications Web accessibles au public et des installations Node.js identifiables de l'extérieur, même celles qui ne figurent sur aucune liste interne, et à prioriser l'ordre des mises à jour. Un aperçu rapide est fourni par le Analyse des risques informatiques. intelligence préventive.
LocateRisk ne remplace pas la gestion des correctifs et ne fait aucune déclaration concernant une version vulnérable de Node.js sur un système détecté ou si l'application décompresse des données Brotli. Les services et applications internes qui récupèrent des fetch() données de serveurs externes ne sont pas couverts par cette vue extérieure. Pour cela, un inventaire interne et une comparaison avec l'avis Node.js ou l'état du paquet de la distribution sont nécessaires.
Pour les applications web externalisées ou les portails clients, la gestion des risques fournisseurs peut aider à documenter de manière compréhensible les retours des prestataires concernant l'état des correctifs.
Suis-je concerné ?
Toutes les versions de Node.js avant les mises à jour mentionnées dans le tableau ci-dessus ainsi que les lignes en fin de vie 25.x, 23.x, 20.x et antérieures sont concernées. Quiconque souhaite savoir si Node.js est visible dans son infrastructure externe accessible peut utiliser le Vérification rapide CVE à consulter à la fin de cet article : il présente les systèmes exposés et les logiciels identifiables depuis l'extérieur.
Il n'est pas toujours possible de déterminer la version effectivement installée à partir d'éléments externes — il est essentiel de la comparer avec l'avis de sécurité du fabricant.
Node2Shell est le nom sous lequel la vulnérabilité de sécurité Node.js CVE-2026-111497 est discutée. Il s'agit d'une erreur de mémoire dans le décodeur Brotli, où des données sont écrites au-delà des limites d'un tampon (Out-of-Bounds-Write). Des données Brotli compressées préparées peuvent ainsi endommager la mémoire et, dans le pire des cas, exécuter du code.
Oui, dans le laboratoire. Imperva a démontré l'exécution de code contre l'image officielle Node.js-24.22.0 sur Linux arm64. Une preuve de concept séparée est publique, mais n'atteint l'exécution de code que sur une version de test intentionnellement affaiblie. Une exploitation active n'a pas été signalée jusqu'au 22 octobre 2026.
Le projet Node.js l'évalue comme élevé, l'entrée CVE de Google l'évalue avec un CVSS de 9.2 comme critique. Pour la priorisation, il est surtout important de savoir si une application décompresse des données Brotli d'une source non sécurisée, par exemple via Express 5 ou fetch().
Node.js 22.23.4, 24.22.1 et 26.12.1, publié le 21 octobre 2026, ainsi que la bibliothèque Brotli dans les versions 1.0.10, 1.1.1 et 1.2.1. Bun est protégé à partir de la version 1.4.4.
Peut-être. En plus d'Express 5 et body-parser 2.x, cela inclut également le fetch() qui conduit à la vulnérabilité, car il décompresse automatiquement les réponses Brotli. Des bibliothèques qui node:zlib peuvent traiter des données Brotli. La mise à jour de l'environnement d'exécution est donc toujours la bonne démarche.
Rejeter les requêtes avec Content-Encoding : br rejeter au niveau du proxy ou dans le middleware et restreindre temporairement les fonctions qui récupèrent des données depuis des serveurs externes. Il n'y a pas de solution de contournement officielle, et les règles de proxy et de WAF ne sont pas efficaces contre les réponses Brotli sur des appels internes.
Les premières sources d'information sont le conseil de sécurité du projet Node.js, l'entrée CVE et l'analyse technique d'Imperva. Ceux qui n'exploitent pas Node.js eux-mêmes, par exemple sur des plateformes d'hébergement ou des prestataires de services, doivent contacter directement le fournisseur et demander l'état des correctifs.
Stand : 23.10.2026. Cet article est à des fins d'information générale et ne constitue pas un conseil juridique, de sécurité ou d'action au cas par cas. La situation de sécurité et la disponibilité des correctifs peuvent avoir changé depuis la publication ; l'avis du fabricant lié est toujours déterminant. Malgré des recherches minutieuses, nous déclinons toute responsabilité quant à l'actualité, la précision et l'exhaustivité.
Vérification rapide CVE
Vérifiez en quelques minutes si votre surface d'attaque visible depuis l'extérieur présente des indices liés à une vulnérabilité CVE actuelle.
Première évaluation en quelques minutes par e-mail.
Pour en savoir plus, contactez gratuitement un consultant LocateRisk.
Vous recevrez cela par e-mail
EntreprisesVotre société GmbH
CVE vérifiésCVE-2026-111497
Évaluation passive
Remarques concernant le CVEtrouvé ou non trouvé
En savoir plus, réserver une démo ou simplement échanger quelques mots ? Nous nous en réjouissons !
Nous utilisons des cookies pour optimiser notre site web et nos services.
Fonctionnel
Always active
le stockage technique ou l'accès est strictement nécessaire dans le but légitime de permettre l'utilisation d'un service spécifique expressément demandé par l'abonné ou l'utilisateur, ou dans le seul but d'effectuer la transmission d'une communication par la voie d'un réseau de communications électroniques
Préférences
le stockage ou l'accès technique est nécessaire aux fins légitimes de la conservation des préférences qui n'ont pas été demandées par l'abonné ou l'utilisateur.
Statistiques
le stockage ou l'accès technique, à des fins exclusivement statistiques.le stockage ou l'accès technique, utilisé uniquement à des fins statistiques anonymes. En l'absence d'une citation, d'un accord volontaire de ton fournisseur d'accès à Internet ou d'enregistrements supplémentaires de tiers, les informations stockées ou consultées à cette seule fin ne peuvent généralement pas être utilisées pour t'identifier.
Marketing
Le stockage technique ou l'accès est nécessaire pour créer des profils d'utilisateurs, pour envoyer des publicités ou pour suivre l'utilisateur sur un site web ou sur plusieurs sites web à des fins de marketing similaires.