Corriger les vulnérabilités de Node.js dans Ubuntu

Les correctifs php2shell (CVE-2026-109618 et CVE-2026-109619) pour les versions de PHP en fin de vie sont désormais disponibles. Les réponses du service commercial étant plus lentes que d'habitude en raison d'une forte demande, le moyen le plus rapide d'obtenir les paquets corrigés est d'acheter ELS for Runtimes en ligne (s'ouvre dans un nouvel onglet). Consulter la FAQ sur les correctifs

Accédez directement au résumé généré par l'IA de cet article de blog

  • Résumez cet article avec Perplexity
  • Résume cet article avec Gemini

Principaux enseignements

  • Les vulnérabilités de Node.js peuvent provenir de trois sources : le moteur d'exécution, les dépendances npm (y compris les dépendances transitives) et des API HTTP, TLS ou de système de fichiers mal configurées.
  • Les failles de type « path traversal », « prototype pollution », « ReDoS » et les failles DoS liées au protocole HTTP/2 constituent les catégories de vulnérabilités qui causeront des dommages concrets dans les environnements de production en 2026.
  • Les dernières mises à jour de sécurité ont corrigé des failles de gravité élevée dans les versions actuellement utilisées ; toutefois, les correctifs pour Node.js 20.x et les versions antérieures ont atteint leur fin de vie et ne bénéficieront plus de mises à jour en amont.
  • La détection nécessite de combiner npm audit, un scanner SCA et des vérifications de version en exécution ; aucun outil ne permet à lui seul de tout détecter.

La plupart des failles de sécurité liées à Node.js ne trouvent pas leur origine dans une faille « zero-day ». Elles proviennent d’un fichier `package.json` que personne n’a modifié depuis 14 mois, fonctionnant sur une version LTS dont la fin de vie est passée inaperçue. Les vulnérabilités de Node.js sont particulièrement faciles à ignorer… jusqu’à ce qu’un CVE apparaisse dans une dépendance transitive dont vous ignoriez l’existence ; du coup, le scanner vous alerte et vous ne parvenez pas à déterminer immédiatement ce qui est réellement exposé.

Cet article traite des risques réels en 2026 : ce que les dernières mises à jour de sécurité ont corrigé, quelles catégories de vulnérabilités continuent d'apparaître dans la nature, comment les détecter dans votre infrastructure, et les pratiques de correction qui résistent à la pression des audits.

Pourquoi les applications Node.js sont-elles souvent la cible d'attaques ?

Aperçu visuel des surfaces d'attaque de Node.js, y compris les dépendances.

Node.js se trouve au carrefour de trois éléments particulièrement prisés par les pirates : un vaste écosystème de paquets publics, une boucle d'événements JavaScript monothread qui sanctionne l'utilisation abusive du processeur, et un environnement d'exécution souvent exposé directement à Internet via des serveurs HTTP et des API. Cette combinaison crée une vaste surface d'attaque et une longue liste de déploiements non corrigés.

Plus précisément :

  • npm est le plus grand registre de paquets au monde – et la cible la plus active pour les paquets malveillants. Sonatype a bloqué 136 107 attaques de logiciels malveillants open source rien qu'au premier trimestre 2026, npm représentant 75 % de tous les nouveaux paquets malveillants détectés au cours de ce trimestre.
  • Exécution monothread signifie qu’une seule expression régulière lente ou une seule requête gourmande en ressources CPU peut bloquer l’ensemble du processus – aucune autre requête n’est traitée tant que celle-ci n’est pas terminée.
  • Les déploiements en production à longue durée de vie fonctionnent souvent sur des versions de Node en fin de vie, car la mise à niveau implique de tester chaque dépendance pour détecter d'éventuelles modifications incompatibles, ce que les équipes reportent indéfiniment.
  • Les frameworks tels qu'Express, Next.js et NestJS constituent la couche accessible au public pour une grande partie des API web ; ainsi, toute faille dans l'analyse HTTP, les en-têtes ou le routage est directement accessible depuis Internet.
  • Profondeur des dépendances transitives – une application Node.js classique utilise des centaines de paquets, et la plupart des équipes ne vérifient que ceux qu’elles ont elles-mêmes déclarés. Tout ce qui se trouve en dessous fonctionne sur la base de la confiance.

Les vulnérabilités les plus courantes de Node.js

Ce sont les catégories qui apparaissent le plus souvent dans les rapports CVE, les résultats des scanners et les analyses post-incident. Chacune d'entre elles suit un schéma de correction différent ; les reconnaître au premier coup d'œil permet donc de gagner du temps lorsqu'un CVE est publié.

Pollution liée aux prototypes

Une faille de type « prototype pollution » permet à un pirate d'injecter des propriétés dans Object.prototype, qui apparaît alors sur tous les objets du runtime. Cela se produit généralement à la suite d'opérations de fusion ou de clonage non validées sur des données JSON en entrée – le genre de situation qui semble inoffensive jusqu'à ce que l'on se rende compte que la propriété que l'on vient de définir est désormais accessible à du code qui n'a absolument rien à voir. lodash, minimist, et divers chargeurs de configuration ont tous fait l'objet de CVE à ce sujet. L'impact va du contournement de l'authentification à l'exécution de code arbitraire, selon le code en aval qui récupère la propriété corrompue.

Parcours de chemin dans les API de fichiers et HTTP

Le parcours de chemin revient sans cesse dans cette liste, car Node.js ne cesse de découvrir de nouveaux cas particuliers. 27210 était une correction incomplète d'un bug spécifique à Windows dans path.normalize() et path.join() impliquant des noms de périphériques tels que CON, PRN et AUX – le genre de problème qui n'apparaît que sous Windows et que presque personne ne teste. CVE-2025-55130, corrigée en janvier 2026, est un problème connexe : des chaînes de liens symboliques spécialement conçues peuvent contourner les restrictions –allow-fs-read et –allow-fs-write du modèle d'autorisation. Tout code acceptant un chemin d'accès fourni par l'utilisateur est concerné.

Attaque par déni de service via expressions régulières (ReDoS)

ReDoS est en quelque sorte une vulnérabilité caractéristique de Node.js. En raison de la boucle d'événements monothread, une expression régulière lente ne se contente pas de ralentir une seule requête : elle bloque tout le système jusqu'à ce qu'elle ait terminé. Une chaîne de caractères spécialement conçue – souvent composée de quelques centaines de caractères seulement et comportant le bon motif de retour en arrière – peut être envoyée par un attaquant distant pour saturer le processeur à 100 % et priver de ressources toutes les autres requêtes.

La faille CVE-2024-21538 dans Cross-Spawn illustre bien l'ampleur de son impact. Cross-Spawn est une dépendance transitive de Jest, ESLint, Webpack, Create-React-App et de milliers d'autres outils ; la plupart des projets Node.js l'utilisent à plusieurs niveaux de profondeur sans même s'en rendre compte. Une seule vulnérabilité dans un paquet de ce type affecte simultanément des millions de projets.

Attaques de la chaîne d'approvisionnement via npm

Les paquets malveillants présents dans le registre npm – qu'ils soient publiés ouvertement ou injectés via des comptes de responsables compromis – constituent un problème croissant. Le typosquatting (publier « lodesh » en espérant que quelqu'un oublie le « e ») existe depuis des années, mais les attaques plus sophistiquées compromettent directement des paquets légitimes et largement utilisés. Une fois qu'une version malveillante se trouve dans le registre, tout projet utilisant une plage de versions (^ ou ~) au lieu d'une version fixe la récupérera lors de la prochaine installation.

Déni de service HTTP/2 et TLS

L'implémentation HTTP/2 dans Node.js a été une source récurrente de vulnérabilités de type déni de service (DoS). CVE-2025-59465 est la dernière faille en date affectant le serveur HTTP/2 : une trame HEADERS HTTP/2 mal formée provoque un plantage de type déni de service sans qu'aucune authentification ne soit requise. CVE-2025-59464 concerne une fuite de mémoire dans la gestion des erreurs TLS lors du traitement des certificats clients, qui s'accumule jusqu'à ce que le processus soit à court de mémoire. Aucune de ces vulnérabilités ne nécessite d'exploitation sophistiquée ; il suffit d'envoyer les bons octets vers un port ouvert.

Vulnérabilités de Node.js corrigées dans les mises à jour de sécurité de 2026

Node.js a publié deux mises à jour de sécurité majeures en 2026 – le 13 janvier et le 24 mars – qui concernaient toutes les branches de version actives. La mise à jour de mars est particulièrement révélatrice : l'un de ses correctifs de haute gravité concernait un patch incomplet datant de janvier, ce qui signifie que la faille TLS n'avait pas été entièrement comblée lors de la première mise à jour. Ce n'est pas inhabituel dans les environnements d'exécution complexes, mais cela souligne pourquoi il est important de rester à jour avec la dernière version mineure, et pas seulement avec la dernière version majeure.

13 janvier 2026 - Mise à jour de sécurité :

CVE

Sévérité

concerné

Fonctionnalités

21636

Moyen

v25 (modèle d'autorisation)

Les connexions UDS contournent les vérifications « –allow-net », permettant ainsi l'accès aux services locaux privilégiés

21637

Moyen

20.x, 22.x, 24.x, 25.x

Les callbacks TLS PSK/ALPN génèrent des exceptions non gérées, ce qui provoque le plantage du serveur et une fuite de descripteurs de fichiers

55130

Haut

Toutes les lignes actives

Des chaînes de liens symboliques spécialement conçues contournent les restrictions –allow-fs-read / –allow-fs-write du modèle d'autorisations

55131

Haut

Toutes les lignes actives

Une condition de concurrence empêche la fonction `Buffer.alloc` de remplir la mémoire avec des zéros, exposant ainsi la mémoire inutilisée

59465

Haut

Toutes les lignes actives

Une trame d'en-têtes HTTP/2 mal formée provoque le plantage du serveur – aucune authentification requise

59464

Moyen

Toutes les lignes actives

Une fuite de mémoire lors du traitement des certificats clients TLS peut entraîner un déni de service à distance au fil du temps

Versions corrigées : 20.20.0, 22.22.0, 24.13.0, 25.3.0.

24 mars 2026 - Mise à jour de sécurité

CVE

Sévérité

concerné

Fonctionnalités

21637

Haut

20.x, 22.x, 24.x, 25.x

Correction incomplète datant de janvier : les exceptions SNICallback continuent de contourner les gestionnaires d'erreurs TLS et provoquent le plantage du processus

21710

Haut

20.x, 22.x, 24.x, 25.x

Une requête HTTP comportant un en-tête nommé « __proto__ » provoque un plantage dû à une erreur TypeError non interceptée – aucune authentification requise

21713

Moyen

20.x, 22.x, 24.x, 25.x

Une comparaison HMAC à temps non constant divulgue des données de synchronisation, ce qui peut permettre la falsification de messages MAC dans certaines conditions

21714

Moyen

20.x, 22.x, 24.x, 25.x

Les trames HTTP/2 WINDOW_UPDATE sur le flux 0 provoquent une fuite de mémoire entraînant l'épuisement des ressources

21717

Moyen

20.x, 22.x, 24.x, 25.x

Les chaînes de caractères de type entier sont hachées de manière prévisible dans V8 – une entrée JSON.parse spécialement conçue peut réduire considérablement les performances

21711

Moyen

v25 (modèle d'autorisation)

La fonction bind/listen du serveur UDS fonctionne sans l'option –allow-net, exposant ainsi les points de terminaison IPC locaux

21712

Moyen

24.x, 25.x

Un IDN mal formé dans la fonction url.format() provoque une erreur d'assertion et entraîne le plantage du processus

Versions corrigées : 20.20.2, 22.22.2, 24.14.1, 25.8.2.

Remarque : Les versions 20.x et antérieures de Node.js sont désormais en fin de vie (EOL) — la version 18.x depuis avril 2025, la version 20.x depuis le 30 avril 2026 — et aucun correctif en amont n'est prévu. v24.16.0 La version LTS actuellement active est la 24.x (dernière version : v24.16.0).

Comment détecter les vulnérabilités de Node.js

Aucun outil ne permet à lui seul de tout détecter. C'est justement dans les lacunes entre les outils que les vulnérabilités persistent le plus longtemps : il peut s'agir d'un élément qui n'apparaît pas dans npm audit parce qu'il n'est pas encore répertorié dans la base de données des avis de sécurité, ou d'un élément détecté par votre scanner SCA mais non par votre vérification de version d'exécution. Les étapes ci-dessous constituent le minimum requis.

Infographie illustrant la détection des vulnérabilités à plusieurs niveaux pour les applications Node.js.

Lancez la commande « npm audit », mais ne vous arrêtez pas là

npm audit est un outil gratuit et intégré qui analyse vos paquets npm par rapport aux entrées CVE (Common Vulnerabilities and Exposures) répertoriées dans la base de données des avis de sécurité. Cela dit, il s'agit tout de même de la première étape la plus rapide :

npm audit--audit-level=high
npm audit fix

Il ne tiendra pas compte des vulnérabilités présentes dans le runtime Node.js lui-même, dans les paquets internes non publiés, ni de tout ce qui n'a pas encore été signalé au flux GitHub Advisory. Considérez cela comme un seuil minimum, et non comme une limite maximale.

Ajouter un scanner SCA

Un outil d’analyse de la composition logicielle – Snyk, Trivy, GitHub Dependabot – comble les lacunes laissées par l’audit npm : dépendances transitives, problèmes de licence, CVE d’exécution et images de base des conteneurs. Le rapport 2024 de Snyk sur l’état de la sécurité open source a révélé que 25 % des équipes ne surveillent que les dépendances directes et que près de 5 % n’en surveillent aucune. C'est exactement ainsi que les vulnérabilités transitives restent non corrigées pendant des mois. Le même rapport a révélé que la proportion d'organisations investissant dans la formation à la sécurité de la chaîne d'approvisionnement est passée de 53 % en 2023 à seulement 35 % en 2024 – alors même que le nombre d'équipes devant corriger ou remplacer des paquets vulnérables est resté stable, au-dessus de 40 %. Les équipes en font moins pour garder une longueur d'avance alors que le problème ne diminue pas.

Vérifiez la version de votre environnement d'exécution Node.js

Exécuter node -v en fonction du calendrier de publication de Node.js et des derniers bulletins CVE. En mai 2026, la version LTS actuelle est la 24.x, la 22.x étant toujours en maintenance LTS. En dessous de la version 22.x, vous déployez un runtime vulnérable, quelle que soit la propreté apparente de votre arborescence de dépendances. Cette vérification est souvent négligée car le runtime est perçu comme une infrastructure – gérée par l’équipe de la plateforme – plutôt que comme du code d’application relevant de la responsabilité du développeur. En réalité, il s’agit des deux.

Générer et surveiller une SBOM

A Liste des composants logiciels vous fournit le graphe complet des dépendances transitives dans un format que vous pourrez consulter ultérieurement sans avoir à recompiler à partir du code source. Générez-en un à l'aide de cyclonedx-npm ou syft, l'enregistrer et le comparer chaque semaine aux flux CVE mis à jour. Une SBOM vous permet de détecter les vulnérabilités révélées après la mise en production ; sans elle, vous devriez recompiler le code à partir des sources pour les identifier.

Suivez la liste de diffusion sur la sécurité de Node.js

Abonnez-vous à la liste de diffusion nodejs-sec: elle couvre toutes les publications liées à la sécurité au sein du projet Node.js et de l'organisation GitHub plus large gérée par l'équipe Node.js. Les avis de pré-publication sont généralement diffusés 3 à 7 jours avant les correctifs, ce qui laisse suffisamment de temps pour planifier des fenêtres de maintenance et informer l'équipe d'astreinte. La plupart des ingénieurs prennent connaissance des CVE de Node.js via leur scanner, qui accuse déjà un retard d'un ou deux jours par rapport au flux d'avis.

Bonnes pratiques pour atténuer les vulnérabilités de Node.js

Automatisation de l'application des correctifs

Les cycles de correction manuels ne sont pas évolutifs. Le temps qu’un humain examine, teste et déploie un correctif, la vulnérabilité (CVE) est déjà publique depuis suffisamment longtemps pour que des scans opportunistes la détectent. Le rapport 2024 de Snyk a révélé que 74 % des équipes fixent des objectifs de SLA d’une semaine ou moins pour les vulnérabilités à haut risque – pourtant, 52 % d’entre elles ne respectent régulièrement pas ces délais. Le problème ne réside pas dans l'effort, mais dans le volume considérable de correctifs à appliquer.

C'est l'automatisation qui permet réellement de combler ce fossé : mises à jour automatisées des dépendances dans l'environnement d'intégration continue (CI), application automatisée de correctifs à l'exécution au niveau de l'infrastructure, et alertes automatisées qui acheminent les CVE pertinentes vers les personnes concernées, au lieu d'inonder tout le monde de fausses alertes générées par les scanners.

Verrouillez et fixez vos dépendances

Utilisation package-lock.json (ou pnpm-lock.yaml ou yarn.lock) et validez-le. Ensuite, allez plus loin : liez les dépendances directes à des versions précises dans package.json, et non des plages. Le ^ et ~ Les opérateurs permettent à une « correction » apportée à un paquet transitif de modifier discrètement le comportement de votre exécution sans que vous n'ayez à intervenir. En CI, exécutez npm ci au lieu de npm install – la compilation échoue dès qu'il y a un écart entre le fichier de verrouillage et le manifeste, ce qui permet de détecter le problème avant la mise en production.

Rester sur les versions LTS actives

Le projet Node.js suit un calendrier LTS prévisible : les versions paires deviennent LTS, contrairement aux versions impaires. Node.js 20.x a atteint sa fin de vie le 30 avril 2026, et la version 24.x est actuellement la version LTS active. Node.js 18.x a atteint sa fin de vie en avril 2025 ; la version 16.x, en septembre 2023. Si vous utilisez l'une de ces versions, vous accumulez des CVE sans qu'aucune correction ne soit apportée en amont.

La mise à niveau depuis les versions 16.x, 18.x ou 20.x vers les versions 22.x ou 24.x est généralement gérable, mais elle nécessite de tester chaque dépendance. Le véritable obstacle réside souvent dans un ou deux paquets qui n’ont pas suivi l’évolution des nouvelles API Node : il vaut mieux les identifier et les résoudre plutôt que de continuer indéfiniment à utiliser un environnement d’exécution en fin de vie.

Valider toutes les entrées à la limite

La pollution des prototypes, le parcours de chemin, les attaques ReDoS, l'injection de commandes : toutes ces failles sont, à la base, des défaillances de validation des entrées. Un validateur de schéma tel que zod, joi ou ajv, placé à chaque point de passage HTTP, permet de détecter la plupart de ces failles avant qu'elles n'atteignent la logique de votre application. Ne fusionnez pas les entrées utilisateur dans des objets. Ne transmettez pas les entrées utilisateur à exec, eval, Function ou à des expressions régulières illimitées. Ce n’est pas un travail très glamour, mais c’est là que réside le risque réel.

Exécuter avec le minimum de privilèges

Utilisez le modèle d'autorisations de Node.js lorsque cela est approprié (en gardant à l'esprit qu'il est encore expérimental et qu'il présente des lacunes documentées). Exécutez les conteneurs en tant qu'utilisateurs non root. Utilisez des systèmes de fichiers en lecture seule dans la mesure du possible, supprimez les capacités dont vous n'avez pas besoin et considérez le modèle d'autorisations comme l'une des couches parmi d'autres plutôt que comme un bac à sable complet.

Vous utilisez une version de Node.js en fin de vie ? TuxCare vous propose une couverture de sécurité prolongée

Graphique chronologique illustrant les cycles de vie de la prise en charge des versions de Node.js et la couverture ELS.

Toutes les entreprises ne peuvent pas effectuer de mise à niveau selon le calendrier du fournisseur. Node.js 16.x a atteint sa fin de vie (EOL) en septembre 2023. Node.js 18.x a suivi en avril 2025. Pour les équipes qui utilisent encore ces versions – souvent en raison d’une chaîne de dépendances spécifique, d’une exigence de conformité ou d’une migration en cours –, le problème concret est évident : les vulnérabilités (CVE) ne cessent de s’accumuler sans qu’aucun correctif en amont ne soit disponible.

Le service « Endless Lifecycle Support » (ELS) de TuxCare pour Node.js répond directement à ce besoin. TuxCare assure la rétroportabilité des correctifs de sécurité pour les versions 12, 14, 16, 18 et 20 de Node.js – qui sont fournis à vos systèmes aussi longtemps que vous en avez besoin, sans avoir à attendre une version en amont qui ne verra jamais le jour. Cela s'avère particulièrement utile pour :

  • Les équipes en cours de migration qui ont besoin d'une solution de remplacement pendant leur transition vers une version LTS prise en charge
  • Les organisations soumises à des exigences de conformité (PCI DSS, SOC 2, FedRAMP) qui considèrent les environnements d'exécution en fin de vie comme des constatations d'audit automatiques
  • Les équipes chargées de l'infrastructure qui gèrent de vastes parcs de serveurs, où les mises à jour de Node.js nécessitent des tests coordonnés sur des dizaines de services

Les correctifs ELS couvrent les vulnérabilités CVE importantes en matière de sécurité – celles qui apparaissent dans votre scanner et dans vos rapports de conformité – sans vous obliger à aller plus vite que ne le permet votre plan de migration.

Réduisez les risques liés aux vulnérabilités de Node.js avec TuxCare

Les vulnérabilités de Node.js ne sont pas près de diminuer. npm est trop volumineux, le moteur d'exécution est trop largement déployé, et le délai entre la divulgation d'un CVE et le moment où la plupart des équipes appliquent effectivement le correctif reste inquiétant. Les équipes qui gèrent bien cela ne font rien d’extraordinaire : elles ont automatisé les tâches fastidieuses, elles surveillent les flux appropriés, elles connaissent le contenu de leur arborescence de dépendances et elles ont un plan pour faire face à la fin de vie d’une version.

La détection et la correction sont toutes deux indispensables. La détection permet d'identifier les failles ; c'est au niveau de la correction que le travail s'effectue réellement. Entre les deux, le facteur le plus déterminant est généralement le délai de correction : c'est en réduisant le délai entre la divulgation et le déploiement que l'on diminue l'exposition réelle, et pas seulement la « propreté » des résultats de scan.

Pour toute question concernant la stratégie de mise à jour ou la prolongation du support pour les versions de Node.js arrivées en fin de vie, contactez un expert en sécurité de TuxCare.

Résumé
Vulnérabilités de Node.js : principaux risques et comment sécuriser les applications en 2026
Nom de l'article
Vulnérabilités de Node.js : principaux risques et comment sécuriser les applications en 2026
Description
Découvrez les principales vulnérabilités Node.js auxquelles les développeurs seront confrontés en 2026 et apprenez des méthodes éprouvées pour réduire les risques, appliquer les correctifs plus rapidement et sécuriser l'infrastructure des applications.
Auteur
Nom de l'éditeur
de TuxCare
Logo de l'éditeur

Rejoignez plus de 4 500 professionnels de Linux et de l'Open Source!

2 fois par mois. Pas de spam.

Table des matières
Obtenez les réponses à vos questions sur la sécurité des logiciels libres

Rejoignez plus de 4 500 professionnels de Linux et de l'Open Source!

2 fois par mois. Pas de spam.