# Node2Shell (CVE-2026-111497) : la faille Brotli dans Node, Python et tout ce qui l'intègre

> Amen Security Team · 2026-10-24T15:24:50.114Z · security

La semaine du 21 octobre 2026 a offert à l’internet deux vulnérabilités majeures, mais l’attention s’est concentrée sur une seule d’entre elles. Pendant que tout le monde regardait PHP, une seule faille dans une bibliothèque de compression mettait discrètement sur la même liste de correctifs les applications Node.js, les environnements Python, les proxys et les maillages de services. Son nom est Node2Shell. Son CVE est CVE-2026-111497. Et le plus dérangeant n’est pas la faille elle-même — c’est le nombre d’endroits où le même code défectueux se cache.
En 30 secondes
- CVE-2026-111497 est une écriture hors limites dans le décodeur Brotli, une bibliothèque C intégrée dans Node.js, des paquets Python, Bun, curl, Envoy, Istio et bien d’autres. Node.js la classe de gravité élevée et affirme qu’elle permet l’exécution de code à distance.
- « HTTP2Shell » est le même CVE sous un deuxième surnom, pas une deuxième faille.
- Des versions corrigées existent pour chaque foyer majeur de la faille — mais les correctifs Python ont été publiés discrètement, sans aucune mention de vulnérabilité dans les notes de version, si bien que les scanners peuvent les manquer. Trouver chaque copie que vous intégrez est le vrai travail.

Sommaire : Un seul décodeur, la moitié de la plomberie de l’internet · La semaine en revue · Où la faille vit réellement · Le correctif Python que personne n’a annoncé · Qui doit s’inquiéter en premier · Trouvez chaque Brotli que vous intégrez · Quatre vérifications à faire aujourd’hui · Votre semaine, dans l’ordre · Cinq questions, des réponses directes · Lectures liées · Commencez par la copie que vous oublieriez
Un seul décodeur, la moitié de la plomberie de l’internet
Brotli est un format de compression. Quand un serveur vous envoie une page web, ou que votre application récupère des données d’un autre service, les données sont souvent compressées avec Brotli d’abord, puis décompressées à l’arrivée. La décompression est assurée par une petite bibliothèque C rapide qu’un nombre remarquable de projets intègrent simplement, plutôt que d’écrire la leur.
CVE-2026-111497 est une écriture hors limites dans ce décodeur : des données compressées spécialement conçues peuvent amener le décodeur à écrire au-delà de la mémoire qui lui a été attribuée. Node.js classe la faille de gravité élevée et affirme qu’elle permet l’exécution de code à distance. Comme la décompression a généralement lieu avant toute vérification de connexion de l’application — le serveur doit décompresser la requête avant de pouvoir la lire — une charge utile conçue peut atteindre le code natif très tôt, là où une erreur JavaScript ne vous sauverait jamais.
C’est pourquoi le nom compte moins que la bibliothèque. Appelez-la Node2Shell, appelez-la HTTP2Shell — les deux surnoms désignent le même CVE, le même décodeur, le même correctif. Si vous traitez les deux noms comme deux problèmes, vous corrigerez une liste et en manquerez une autre. Il n’y a qu’une seule liste, et elle est plus longue que les notes de version de Node.js ne le laissent croire.
L’histoire jumelle de la même semaine vaut la peine d’être lue à côté de celle-ci : [PHP2Shell : les failles PHP d’octobre 2026 et la vérification de 15 minutes pour votre site Web](https://amensecurity.ca/fr/blog/php2shell-critical-php-vulnerability-canada-2026). Même semaine, autre environnement d’exécution, même leçon — la couche sous votre code a besoin de son propre correctif.
La semaine en revue
Date (2026)
Ce qui s’est passé

21 octobre
Node.js publie les versions de sécurité 22.23.4, 24.22.1 et 26.12.1, corrigeant 10 CVE — quatre de gravité élevée, trois moyennes, trois faibles selon la couverture secondaire de la version. Le correctif principal est CVE-2026-111497.

21 octobre
Brotli publie les versions corrigées 1.2.1, 1.1.1 et 1.0.10 ; le même correctif arrive dans Bun 1.4.4 et dans les images Docker officielles de Node.js.

22 octobre
Une preuve de concept publique apparaît, et des chercheurs signalent une exécution de code sur une version Node.js 24.22.0 non modifiée, en conditions de laboratoire.

23 octobre
OpenAI déclare avoir trouvé la faille lors d’un exercice de red team, et note qu’elle fonctionne dans les deux sens : un client malveillant contre un serveur, et un serveur malveillant contre un client tel que curl --compressed. Le surnom « HTTP2Shell » commence à circuler pour le même CVE.

23 octobre, 22 h 00 UTC
Le CVE ne figure pas dans le fichier des vulnérabilités exploitées de la CISA, et aucune exploitation dans la nature n’a été signalée. C’est le statut honnête — ce n’est pas la même chose que d’être en sécurité.

Où la faille vit réellement
Voici le tableau auquel comparer votre pile. Une « version corrigée » désigne ici la version qui contient le décodeur corrigé — toute version antérieure de la même ligne contient toujours la faille.
Foyer de la faille
Version corrigée
Notes

Node.js 22.x
22.23.4
Corrige aussi des contournements de vérification de nom d’hôte TLS (CVE-2026-105483, CVE-2026-106069) et une faille de troncature DNS (CVE-2026-105482).

Node.js 24.x
24.22.1
Mêmes correctifs compagnons que 22.x, plus des mises à jour de dépendances intégrées.

Node.js 26.x
26.12.1
Mêmes correctifs compagnons que 22.x, plus des mises à jour de dépendances intégrées.

Node.js 20.x et antérieures
Aucun correctif
Node 20 a atteint sa fin de vie le 30 avril 2026. La seule option est de monter vers 22, 24 ou 26.

libbrotli (la bibliothèque C elle-même)
1.2.1
Aussi corrigée en 1.0.10 et 1.1.1 pour les lignes plus anciennes.

Paquet Python Brotli
1.2.1
Avis PYSEC-2026-4322 ; avis GitHub GHSA-9v8h-qqgm-4m35.

Paquet Python brotlicffi
1.2.1.0
Avis PYSEC-2026-4323.

Bun
1.4.4
Les versions antérieures à 1.4.4 sont touchées.

curl / libcurl
Mettre à jour la dépendance Brotli vers 1.2.1, ou prendre un paquet corrigé du fournisseur
curl n’intègre rien à corriger sur place — son Brotli vient de la dépendance.

Envoy
1.40.0 / 1.39.3 / 1.38.6 / 1.37.8
Choisissez le correctif de la ligne que vous utilisez.

Istio
1.29.9 / 1.30.6 / 1.31.2
Choisissez le correctif de la ligne que vous utilisez.

La version actualise aussi des dépendances intégrées (c-ares, OpenSSL, SQLite, Undici) et retire la confiance accordée au certificat intermédiaire eMudhra compromis — utile, mais rien de tout cela ne remplace le correctif du décodeur.
Le correctif Python que personne n’a annoncé
Voici le détail qui distingue cette histoire d’un mardi de correctifs ordinaire. Les correctifs Python — Brotli 1.2.1 et brotlicffi 1.2.1.0 — ont été publiés discrètement, sans aucune mention de vulnérabilité dans leurs notes de version. Les avis (PYSEC-2026-4322, PYSEC-2026-4323) existent, mais une équipe qui lit les notes de version, ou qui s’appuie sur un scanner dont la base de données n’a pas encore rattrapé l’information, peut passer à côté en croyant que Python n’est pas touché.
C’est une façon plausible de finir corrigé sous Node et toujours exposé sous Python : le même décodeur, dans un deuxième langage, sur le même serveur, sans aucune annonce pour déclencher votre processus. Si votre flux de correctifs part des annonces des fournisseurs, ajoutez celui-ci manuellement — vérifiez les versions installées directement (voir les quatre vérifications ci-dessous) au lieu d’attendre qu’un fil d’information vous le dise.
Qui doit s’inquiéter en premier
Tous les serveurs Node ne sont pas exploitables à distance, et affirmer le contraire serait malhonnête. L’exploitation exige une application qui traite des données Brotli contrôlées par un attaquant via le décodeur vulnérable. Cela place en tête de file :
- Les serveurs qui décompressent les corps de requête. Express 5 et body-parser 2.x décompressent les corps de requête Brotli, donc un client peut envoyer une requête Content-Encoding: br conçue directement vers eux.
- Les applications qui récupèrent des données à des adresses contrôlées par d’autres. Si votre code appelle fetch() sur une adresse fournie par un utilisateur, un serveur malveillant peut renvoyer des données compressées conçues.
- Les proxys, passerelles et services d’ingestion. Tout ce qui compresse ou décompresse le trafic d’autrui en volume.
- Les téléversements et réponses compressés. Tout chemin par lequel des données compressées arrivent de l’extérieur de votre périmètre de confiance.

Plus bas dans la liste, mais pas hors de la liste : les services internes qui ne se parlent qu’entre eux. Plusieurs des correctifs compagnons protègent les appels que votre code fait à d’autres services, pas seulement les requêtes qu’il reçoit, et le retrait du certificat eMudhra touche chaque appel HTTPS sortant. Corrigez ceux-là aussi — corrigez simplement d’abord ceux qui sont exposés à l’internet.
Une autre note d’honnêteté : mettre à jour la bibliothèque Brotli du système sur un serveur ne corrige pas une copie intégrée dans un environnement d’exécution ou un paquet. Chaque copie intégrée a besoin de sa propre mise à jour, et c’est exactement pourquoi l’inventaire ci-dessous compte plus que n’importe quelle commande de mise à jour isolée.
Trouvez chaque Brotli que vous intégrez
Corriger un environnement Node est une montée de version. Trouver chaque copie de Brotli dans votre pile est le vrai travail — et c’est la partie que la plupart des équipes sous-estiment, parce que les copies ne vivent pas au même endroit. Parcourez ces quatre cachettes dans l’ordre :
- Les environnements Node — tous, pas seulement celui par défaut. Changer la version par défaut de nvm ne déplace aucune des autres : les entrées pm2 (en direct et sauvegardées), le démon pm2 lui-même, les unités systemd avec un PATH codé en dur vers une ancienne installation, et les tâches cron pointant vers un ancien binaire par chemin absolu continuent tous d’exécuter l’ancien environnement jusqu’à ce que vous déplaciez chacun d’eux. Vérifiez le vrai binaire de chaque processus en cours, pas le nom du processus.
- Les environnements Python. Chaque environnement virtuel, chaque image de déploiement, chaque serveur de pipeline de données : vérifiez directement les versions installées de Brotli et brotlicffi. Souvenez-vous des notes de version discrètes — ne faites pas confiance à un tableau de bord de scanner au vert ici tant que vous n’avez pas vu les numéros de version.
- Les conteneurs. Reconstruisez les images avec --pull pour qu’elles récupèrent la base corrigée. Les étiquettes officielles node:22, node:24 et node:26 contiennent le correctif ; node:20, node:25 et node:18 ne l’obtiendront pas. Redéployer une ancienne image, c’est redéployer la faille.
- Les copies intégrées. Bibliothèques, SDK et appliances qui intègrent leur propre Brotli — sidecars Envoy et Istio, builds curl, tout ce qui contient un répertoire third_party/brotli — chacun a besoin de sa propre version corrigée, listée dans le tableau ci-dessus. Si vous ne trouvez pas la version d’une copie intégrée, considérez-la comme non corrigée jusqu’à preuve du contraire.

Trouvez chaque Brotli que vous intégrez : environnements d’exécution → environnements Python → conteneurs → copies intégrées.Mettre à jour un seul Node est un changement d’une ligne. Trouver chaque copie de Brotli dans votre pile est le vrai travail — et les copies que vous oubliez sont celles qui restent exposées.

Quatre vérifications à faire aujourd’hui
Aucun nouvel outil n’est nécessaire. Exécutez-les sur chaque serveur qui fait tourner vos applications, pas seulement sur votre portable :
- Vérification 1 — Node, partout où il tourne : node -v sur la machine, puis la version derrière chaque entrée pm2, chaque unité systemd et chaque tâche cron. Tout ce qui est en dessous de 22.23.4 / 24.22.1 / 26.12.1 sur sa ligne, ou sur Node 20 et antérieures, entre sur la liste de correctifs.
- Vérification 2 — Python, par numéro de version : pip show Brotli brotlicffi dans chaque environnement. En dessous de 1.2.1 / 1.2.1.0, c’est non corrigé — peu importe ce que dit un fil d’avis.
- Vérification 3 — Conteneurs, par image de base : listez les étiquettes de base et les dates de reconstruction de vos images. Tout ce qui repose sur une étiquette node antérieure au correctif, ou sur une image non reconstruite avec --pull depuis le 21 octobre, est reconstruit.
- Vérification 4 — Copies intégrées, par aveu : cherchez dans votre arbre de dépendances et vos appliances les Brotli intégrés (Envoy, Istio, builds curl). Toute copie dont vous ne pouvez pas confirmer la version est comptée comme non corrigée jusqu’à confirmation.

Si les quatre vérifications reviennent propres, vous avez terminé — et vous disposez désormais d’une liste que vous pourrez relancer la prochaine fois qu’une bibliothèque intégrée fera la une. Si une vérification révèle une copie que vous n’attendiez pas, c’est tout l’intérêt de l’exercice.
Si vous souhaitez un deuxième regard sur l’inventaire — en particulier les environnements Python et les copies intégrées, que les équipes manquent le plus souvent — [une évaluation gratuite le cartographiera avec vous, et vous gardez la liste dans tous les cas](https://amensecurity.ca/fr/contact).
Votre semaine, dans l’ordre
- Aujourd’hui : corrigez chaque Node, proxy et passerelle exposés à l’internet vers une version corrigée, et vérifiez les versions Python à la main.
- Cette semaine : parcourez les quatre cachettes ci-dessus jusqu’à ce que l’inventaire soit complet ; reconstruisez les conteneurs avec --pull et redéployez.
- Avant de déclarer terminé : relancez les quatre vérifications et confirmez que les processus en cours — pas seulement les paquets installés — tournent sur des versions corrigées. Une mise à jour de paquet qui laisse un ancien processus en cours n’a rien changé.
- Après cela : retenez la leçon pour la prochaine faille de bibliothèque intégrée, car il y en aura une : l’inventaire que vous construisez cette semaine est réutilisable, et la prochaine faille n’attendra pas que votre scanner rattrape l’information.

Cinq questions, des réponses directes
Node2Shell est-il seulement un problème Node.js ?
Non. Node.js est l’endroit où la faille a pris son nom, mais la faille se trouve dans le décodeur Brotli C que Node intègre — et les paquets Python, Bun, curl, Envoy et Istio intègrent le même décodeur. Corriger Node seul laisse les autres copies en place.
HTTP2Shell est-il une deuxième vulnérabilité ?
Non. HTTP2Shell est un surnom qui a commencé à circuler fin octobre pour le même CVE-2026-111497, pas une deuxième faille avec son propre correctif. Un CVE, un décodeur, une liste de correctifs.
Sommes-nous en sécurité parce que personne ne l’a encore exploitée dans la nature ?
Non. Au 23 octobre 2026, aucune exploitation dans la nature n’avait été signalée et le CVE ne figurait pas dans le fichier des vulnérabilités exploitées de la CISA — mais une preuve de concept publique existe et des chercheurs ont déjà démontré une exécution de code en conditions de laboratoire. L’absence de signalements d’exploitation est une mise à jour de statut, pas une garantie de sécurité.
Un audit npm propre signifie-t-il que tout va bien ?
Non. npm audit vérifie vos paquets, pas l’environnement Node.js lui-même ni un décodeur C intégré. Un audit parfaitement propre ne dit rien de l’environnement qu’exécutent réellement vos processus.
Nous avons mis Node à jour — avons-nous terminé ?
Seulement si les quatre vérifications ci-dessus reviennent propres. Les environnements Python, les conteneurs construits sur d’anciennes images de base et les copies intégrées dans les proxys et les maillages sont autant de copies distinctes de la même faille, et chacune a besoin de son propre correctif.
Lectures liées
- [Votre sauvegarde Microsoft 365 peut aussi être attaquée](https://amensecurity.ca/fr/blog/microsoft-365-backup-security-checklist) — la leçon d’octobre 2026 sur l’accès aux sauvegardes : un identifiant volé d’une application connectée a ouvert des locataires, sans aucun mot de passe.
- [PHP2Shell : les failles PHP d’octobre 2026 et la vérification de 15 minutes pour votre site Web](https://amensecurity.ca/fr/blog/php2shell-critical-php-vulnerability-canada-2026) — l’histoire jumelle de la même semaine, et la vérification qui va avec celle-ci.
- [Nettoyez vos licences et vos paramètres de sécurité Microsoft 365](https://amensecurity.ca/fr/blog/microsoft-365-cleanup-licences-security-settings) — l’hygiène du locataire qui rend chaque autre correctif moins coûteux.

Commencez par la copie que vous oublieriez
Si vous ne retenez qu’une chose de cette semaine, que ce soit celle-ci : la copie de Brotli que vous oubliez est celle qui reste exposée, et la copie que la plupart des équipes oublient n’est pas l’environnement Node — c’est le paquet Python aux notes de version discrètes, ou le décodeur intégré dans un proxy que personne n’a inventorié. Vérifiez ceux-là d’abord, ce soir, avant que la semaine avance.
Et si l’inventaire révèle plus de copies que prévu, notre évaluation gratuite les cartographiera avec vous — vous gardez la liste dans tous les cas, que nous travaillions ensemble ou non par la suite.
Encadré de confiance — sources et révision
- Versions de sécurité Node.js d’octobre 2026 (21 octobre 2026) : versions corrigées 22.23.4, 24.22.1, 26.12.1 ; CVE-2026-111497 de gravité élevée, permet l’exécution de code à distance ; failles compagnons CVE-2026-105482, CVE-2026-105483, CVE-2026-106069 ; fin de vie de Node 20 le 30 avril 2026.
- Versions corrigées de Brotli 1.2.1, 1.1.1, 1.0.10 (21 octobre 2026) ; Bun 1.4.4 ; Envoy corrigé 1.40.0 / 1.39.3 / 1.38.6 / 1.37.8 ; Istio corrigé 1.29.9 / 1.30.6 / 1.31.2 ; mise à jour de la dépendance curl/libcurl vers 1.2.1 ou paquet corrigé du fournisseur.
- Avis Python PYSEC-2026-4322 (Brotli 1.2.1) et PYSEC-2026-4323 (brotlicffi 1.2.1.0), avis GitHub GHSA-9v8h-qqgm-4m35 ; correctifs publiés sans mention de vulnérabilité dans les notes de version.
- Preuve de concept publique et exécution de code en laboratoire sur Node 24.22.0 (22 octobre 2026) ; découverte red team d’OpenAI, exploitation dans les deux sens (23 octobre 2026) ; statut du fichier des vulnérabilités exploitées de la CISA au 23 octobre 2026, 22 h 00 UTC (non listé) ; aucune exploitation dans la nature signalée au 23 octobre 2026.
- Révisé : 24 octobre 2026. Par Amen Security, une équipe winnipegoise de services TI gérés et de développement web et d’applications, au service des petites et moyennes entreprises canadiennes et américaines. Aucun service, prix, partenariat ou certification n’est revendiqué dans cet article au-delà de ce que le site en direct prouve.

## Sujet : Cybersécurité et conformité
- [Guide principal](https://amensecurity.ca/fr/services/cybersecurity.md)
- [TI gérées ou dépannage à la demande : comparaison côte à côte](https://amensecurity.ca/fr/guides/msp-vs-break-fix.md)

---
Source page: https://amensecurity.ca/fr/blog/node2shell-nodejs-brotli-rce-october-2026
Markdown version for AI agents · Amen Security
Email: info@amensecurity.ca
Phone: +1 (204) 514-3536
