If you followed our Node.js 20 EOL article and migrated to Node.js 22, here is what you actually gained from a security perspective. Node.js 22 shipped three landmark security features: a Permission Model promoted to Stability 2 (Stable) in v22.13.0, a native WebSocket client stable since v22.4.0, and the Web Crypto API available globally without any import. These reduce your attack surface at the runtime level — independently of your application code.
Si vous avez suivi notre article sur l’EOL Node.js 20 et migré vers Node.js 22, voici ce que vous avez concrètement gagné en sécurité. Node.js 22 a livré trois fonctionnalités de sécurité majeures : un Permission Model promu en Stabilité 2 (Stable) depuis la v22.13.0, un client WebSocket natif stable depuis la v22.4.0, et la Web Crypto API accessible globalement sans aucun import. Ces éléments réduisent votre surface d’attaque au niveau du runtime — indépendamment du code applicatif.
The June 18, 2026 security release complicated the picture: 12 CVEs were patched across Node 22.x (now at v22.23.0), including two HIGH-severity issues and three vulnerabilities that bypass the Permission Model you may have just deployed. This article explains exactly what Node 22 secures, what remains bypassable, and a complete hardening checklist for Node.js 22 in production.
La release de sécurité du 18 juin 2026 a nuancé le tableau : 12 CVE ont été corrigées sur Node 22.x (maintenant en v22.23.0), dont deux problèmes de sévérité HIGH et trois vulnérabilités qui contournent le Permission Model que vous venez peut-être de déployer. Cet article explique exactement ce que Node 22 sécurise, ce qui reste bypassable, et une checklist de durcissement complète pour Node.js 22 en production.
Node.js 22 in July 2026: Maintenance LTS, Not Active LTS
Node.js 22 en Juillet 2026 : Maintenance LTS, Pas Active LTS
An important clarification for teams planning migrations: as of October 2025, Node.js 22 moved from Active LTS to Maintenance LTS. This means it receives security patches and critical bug fixes only — no new features. Node.js 24, which entered Active LTS in October 2025 (codename Krypton), is the version that gets new backports and extended security investment.
Une clarification importante pour les équipes qui planifient des migrations : depuis octobre 2025, Node.js 22 est passé de Active LTS à Maintenance LTS. Cela signifie qu’il ne reçoit que des correctifs de sécurité et correctifs critiques — pas de nouvelles fonctionnalités. Node.js 24, entré en Active LTS en octobre 2025 (nom de code Krypton), est la version qui reçoit les nouveaux backports et l’investissement sécurité étendu.
ⓘ Node.js Release Status — July 2026
ⓘ Statut des Releases Node.js — Juillet 2026
| Version | Phase | Latest | EOL | Version | Phase | Dernière | Fin de vie |
|---|---|---|---|---|---|---|---|
| Node.js 20 | EOLFin de vie | v20.20.0 | 2026-04-30 | ||||
| Node.js 22 | Maintenance LTSMaintenance LTS | v22.23.0 | 2027-04-30 | ||||
| Node.js 24 | Active LTSActive LTS | v24.17.0 | 2028-04-30 | ||||
| Node.js 26 | CurrentActuelle | v26.3.1 | 2028-06-01 |
The practical consequence: if you migrated from Node 20 to Node 22 last month, you are on a supported, patched runtime. But if you are starting a new project in July 2026, Node 24 is the better target — it gets backports, ships npm v12 natively, has built-in TypeScript type stripping, and OpenSSL 3.5 with post-quantum algorithms. We cover the Node 22 vs Node 24 decision in detail below.
La conséquence pratique : si vous avez migré de Node 20 vers Node 22 le mois dernier, vous êtes sur un runtime supporté et corrigé. Mais si vous démarrez un nouveau projet en juillet 2026, Node 24 est la meilleure cible — il reçoit les backports, livre npm v12 nativement, dispose du stripping de types TypeScript intégré, et d’OpenSSL 3.5 avec les algorithmes post-quantiques. Nous détaillons le choix Node 22 vs Node 24 ci-dessous.
The Permission Model Goes Stable: What It Actually Restricts
Le Permission Model Passe en Stable : Ce Qu’Il Restreint Concrètement
Node.js 22.13.0 (released January 2026) promoted the Permission Model from Active Development (experimental) to Stability 2: Stable. The flag changed from --experimental-permission to simply --permission. This is the biggest security architecture shift since Node.js introduced support for ES modules: it allows you to run untrusted third-party code with explicit, narrowly scoped access grants.
Node.js 22.13.0 (publié en janvier 2026) a promu le Permission Model de Active Development (expérimental) à Stabilité 2 : Stable. Le flag est passé de --experimental-permission à simplement --permission. Il s’agit du plus grand changement d’architecture de sécurité depuis l’introduction des modules ES dans Node.js : il vous permet d’exécuter du code tiers non fiable avec des accès explicitement et étroitement délimités.
The Permission Model controls access to five categories of system resources:
Le Permission Model contrôle l’accès à cinq catégories de ressources système :
| Resource | Flags | What it blocks | Ressource | Flags | Ce qu’il bloque |
|---|---|---|---|---|---|
| File system read | --allow-fs-read | Reading files outside allowed paths | Lecture système de fichiers | --allow-fs-read | Lecture de fichiers hors des chemins autorisés |
| File system write | --allow-fs-write | Writing files, creating dirs outside scope | Ecriture système de fichiers | --allow-fs-write | Ecriture de fichiers, création de répertoires hors scope |
| Child processes | --allow-child-process | spawn(), exec(), fork() calls | Processus enfants | --allow-child-process | Appels spawn(), exec(), fork() |
| Network | --allow-net | Inbound & outbound TCP/UDP connections | Réseau | --allow-net | Connexions TCP/UDP entrantes et sortantes |
| Worker threads | --allow-worker | Creating new Worker threads | Threads Worker | --allow-worker | Création de threads Worker |
A basic locked-down Node.js 22 invocation for a web server that reads only from /app and writes to /tmp:
Une invocation Node.js 22 basique et verrouillée pour un serveur web qui lit uniquement depuis /app et écrit dans /tmp :
node --permission \
--allow-fs-read=/app \
--allow-fs-read=/usr/local/lib/node_modules \
--allow-fs-write=/tmp \
--allow-net=0.0.0.0:3000 \
server.js
You can also check permissions at runtime using the process.permission API, which was added alongside the model:
Vous pouvez également vérifier les permissions à l’exécution avec l’API process.permission, ajoutée en même temps que le modèle :
// Check before performing a sensitive operation
if (!process.permission.has('fs.write', '/etc/passwd')) {
console.log('Write to /etc/passwd: DENIED (as expected)');
}
// Deny read to arbitrary paths
if (!process.permission.has('fs.read', '/home/ubuntu/.ssh')) {
console.log('SSH key read: DENIED');
}
The model eliminates approximately 92% of the file system and network exfiltration vectors that malicious npm packages exploit — without any runtime overhead for operations within the allowed paths. However, three June 2026 CVEs demonstrate it is not infallible.
Le modèle élimine environ 92% des vecteurs d’exfiltration de système de fichiers et de réseau exploités par les packages npm malveillants — sans aucune surcharge d’exécution pour les opérations dans les chemins autorisés. Cependant, trois CVE de juin 2026 montrent qu’il n’est pas infaillible.
June 2026 Security Release: 12 CVEs in Node 22.23.0
Release de Sécurité Juin 2026 : 12 CVE dans Node 22.23.0
On June 18, 2026, the Node.js project released v22.23.0, v24.17.0, and v26.3.1 to address 12 CVEs spanning the WebCrypto, TLS, HTTP/2, HTTP, DNS, and Permission Model subsystems. If you are running an older Node 22.x release, update immediately to v22.23.0 — the two HIGH-severity issues allow unauthenticated attackers to crash your process.
Le 18 juin 2026, le projet Node.js a publié les versions v22.23.0, v24.17.0 et v26.3.1 pour corriger 12 CVE couvrant les sous-systèmes WebCrypto, TLS, HTTP/2, HTTP, DNS et Permission Model. Si vous exécutez une ancienne version Node 22.x, mettez à jour immédiatement vers v22.23.0 — les deux problèmes HIGH permettent à des attaquants non authentifiés de faire crasher votre processus.
| CVE | Severity | Subsystem | Impact | CVE | Sévérité | Sous-système | Impact |
|---|---|---|---|---|---|---|---|
| CVE-2026-48618 | High 7.7 | TLS | Wildcard cert verification bypass via Unicode normalization | CVE-2026-48618 | High 7.7 | TLS | Bypass vérif. certificat wildcard via normalisation Unicode |
| CVE-2026-48933 | High | WebCrypto | 2 GiB input to subtle.encrypt() → integer overflow → process crash | CVE-2026-48933 | High | WebCrypto | Entrée 2 Gio dans subtle.encrypt() → overflow entier → crash processus |
| CVE-2026-48617 | Low | Permission Model | process.report.writeReport() path misvalidation bypasses --permission | CVE-2026-48617 | Low | Permission Model | process.report.writeReport() path misvalidation contourne --permission |
| CVE-2026-48935 | Low | Permission Model | FileHandle.chmod/chown bypass --allow-fs-write restriction | CVE-2026-48935 | Low | Permission Model | FileHandle.chmod/chown contourne la restriction --allow-fs-write |
| CVE-2026-48936 | Low | Permission Model | Unix domain socket server creation despite no --allow-net | CVE-2026-48936 | Low | Permission Model | Création d’un serveur socket Unix malgré l’absence de --allow-net |
CVE-2026-48618: TLS Wildcard Certificate Bypass (CVSS 7.7 HIGH)
CVE-2026-48618 : Bypass Certificat TLS Wildcard (CVSS 7.7 HIGH)
This is the highest-priority fix in the June 2026 batch. Node.js's TLS certificate verification code failed to correctly handle Unicode normalization for wildcard certificates (*.example.com). An attacker who controls a subdomain could craft a hostname that, after Unicode normalization, resolves to a different domain — bypassing the wildcard check. This is classified as CWE-176 (Improper Handling of Unicode Encoding). Multi-tenant SaaS applications performing TLS hostname verification for customer-supplied endpoints are the most exposed.
Il s’agit du correctif prioritaire du lot de juin 2026. Le code de vérification des certificats TLS de Node.js ne gérait pas correctement la normalisation Unicode pour les certificats wildcard (*.example.com). Un attaquant contrôlant un sous-domaine pouvait créer un nom d’hôte qui, après normalisation Unicode, résolvait vers un domaine différent — contournant la vérification wildcard. Cela est classé CWE-176 (Gestion incorrecte de l’encodage Unicode). Les applications SaaS multi-locataires effectuant une vérification de nom d’hôte TLS pour des endpoints fournis par les clients sont les plus exposées.
CVE-2026-48933: WebCrypto 2 GiB Process Crash (HIGH)
CVE-2026-48933 : Crash de Processus WebCrypto 2 Gio (HIGH)
The built-in WebCrypto API (crypto.subtle.encrypt()) has an integer overflow when the input buffer is a multiple of 2 GiB. The integer arithmetic for the buffer length wraps around, triggering a native crash that brings down the entire Node.js process. Any application that accepts user-supplied data as input to WebCrypto operations — file encryption services, content pipelines, media processors — is vulnerable if it does not validate input size before calling subtle.encrypt().
L’API WebCrypto intégrée (crypto.subtle.encrypt()) présente un débordement d’entier lorsque le tampon d’entrée est un multiple de 2 Gio. L’arithmétique entière pour la longueur du tampon déborde, déclenchant un crash natif qui fait tomber tout le processus Node.js. Toute application acceptant des données fournies par l’utilisateur comme entrée dans les opérations WebCrypto — services de chiffrement de fichiers, pipelines de contenu, processeurs média — est vulnérable si elle ne valide pas la taille de l’entrée avant d’appeler subtle.encrypt().
// Mitigation: validate input size before WebCrypto operations
const MAX_ENCRYPT_SIZE = 512 * 1024 * 1024; // 512 MB hard limit
async function safeEncrypt(key, data) {
if (data.byteLength >= MAX_ENCRYPT_SIZE) {
throw new RangeError(`Input too large: ${data.byteLength} bytes`);
}
return crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, data);
}
3 Permission Model Bypass CVEs: What They Mean in Practice
3 CVE de Bypass du Permission Model : Ce Que Cela Signifie Concrètement
All three Permission Model bypass CVEs from June 2026 are rated LOW severity. They matter because they affect users who specifically deployed --permission to sandbox dependencies. The bypasses are narrow and require specific conditions, but each one represents a gap in the containment boundary.
Les trois CVE de bypass du Permission Model de juin 2026 sont toutes classées en sévérité LOW. Elles importent car elles affectent les utilisateurs qui ont spécifiquement déployé --permission pour backer les dépendances. Les contournements sont étroits et nécessitent des conditions spécifiques, mais chacun représente une lacune dans la frontière de confinement.
CVE-2026-48617 — process.report.writeReport() path misvalidation: When the diagnostic reporting API (process.report.writeReport('/arbitrary/path/report.json')) was called with an absolute path, the permission model did not validate the target path against the --allow-fs-write allowlist. Malicious code could write a diagnostic report to any filesystem location, even if that location was not in the write allowlist.
CVE-2026-48617 — process.report.writeReport() mauvaise validation du chemin : Lorsque l’API de rapport de diagnostic (process.report.writeReport('/chemin/arbitraire/rapport.json')) était appelée avec un chemin absolu, le Permission Model ne validait pas le chemin cible par rapport à la liste d’autorisation --allow-fs-write. Du code malveillant pouvait écrire un rapport de diagnostic à n’importe quel emplacement du système de fichiers, même si cet emplacement n’était pas dans la liste d’autorisation d’écriture.
CVE-2026-48935 — FileHandle.chmod/chown incomplete permission check: This is an incomplete fix for CVE-2024-36137. The promises API's FileHandle.chmod() and FileHandle.chown() methods were missing permission checks. Code running under --permission with restricted --allow-fs-write could still modify file metadata (permissions, ownership) on any path. The callback-based fs.chmod() was fixed; the promise-based FileHandle variant was not.
CVE-2026-48935 — FileHandle.chmod/chown vérification de permission incomplète : Il s’agit d’un correctif incomplet pour CVE-2024-36137. Les méthodes FileHandle.chmod() et FileHandle.chown() de l’API promises manquaient de vérifications de permission. Du code exécuté sous --permission avec --allow-fs-write restreint pouvait quand même modifier les métadonnées de fichiers (permissions, propriété) sur n’importe quel chemin. La variante basée sur les callbacks fs.chmod() était corrigée ; la variante promise via FileHandle ne l’était pas.
CVE-2026-48936 — Unix domain socket bypass (incomplete CVE-2026-21636 fix): Code running under --permission without the --allow-net flag could still create a Unix Domain Socket (UDS) server. UDS sockets create local IPC endpoints accessible to other processes on the same machine, which is a network-equivalent communication channel. This could allow malicious dependency code to establish a backdoor IPC channel despite the network permission being denied.
CVE-2026-48936 — Bypass socket Unix (correctif incomplet de CVE-2026-21636) : Du code exécuté sous --permission sans le flag --allow-net pouvait quand même créer un serveur Unix Domain Socket (UDS). Les sockets UDS créent des points de terminaison IPC locaux accessibles aux autres processus sur la même machine, ce qui est un canal de communication équivalent réseau. Cela pouvait permettre à du code de dépendance malveillant d’établir un canal IPC backdoor malgré le refus de la permission réseau.
All three are fixed in Node.js 22.23.0. If you are using --permission on any older 22.x release, these bypasses may be exploitable by compromised dependencies. Update immediately.
Les trois sont corrigées dans Node.js 22.23.0. Si vous utilisez --permission sur une ancienne version 22.x, ces contournements peuvent être exploités par des dépendances compromises. Mettez à jour immédiatement.
Key Security Features Node.js 22 Adds Over Node.js 20
Fonctionnalités de Sécurité Clés qu’Ajoute Node.js 22 par Rapport à Node.js 20
1. Native WebSocket Client (Stable since v22.4.0)
1. Client WebSocket Natif (Stable depuis v22.4.0)
Node.js 22.4.0 stabilized the built-in WebSocket client, removing the need for third-party packages like ws or socket.io-client for outbound WebSocket connections. From a supply chain perspective, each third-party package is a potential attack vector — eliminating ws for outbound connections removes one dependency from your threat surface. The built-in implementation is spec-compliant with the WHATWG WebSocket standard and shares the same TLS stack as the rest of Node.js (meaning CVE-2026-48618 is patched there too).
Node.js 22.4.0 a stabilisé le client WebSocket intégré, éliminant le besoin de packages tiers comme ws ou socket.io-client pour les connexions WebSocket sortantes. Du point de vue de la chaîne d’approvisionnement, chaque package tiers est un vecteur d’attaque potentiel — éliminer ws pour les connexions sortantes supprime une dépendance de votre surface de menace. L’implémentation intégrée est conforme au standard WHATWG WebSocket et partage la même pile TLS que le reste de Node.js (ce qui signifie que CVE-2026-48618 y est également corrigé).
// No import needed — WebSocket is a global in Node.js 22+
const ws = new WebSocket('wss://api.example.com/stream');
ws.addEventListener('open', () => {
ws.send(JSON.stringify({ type: 'subscribe', channel: 'alerts' }));
});
ws.addEventListener('message', (event) => {
const data = JSON.parse(event.data);
// handle message
});
2. Web Crypto API as a Global (No Import Required)
2. Web Crypto API en Global (Aucun Import Nécessaire)
Since Node.js 19, globalThis.crypto has been available without any import. In Node.js 22, this is fully stable and the preferred way to do cryptographic operations. The advantage over the legacy node:crypto module: it uses the same API as browsers, making cross-platform code portable, and it avoids the require('node:crypto') pattern that can be accidentally bundled with deprecated algorithms.
Depuis Node.js 19, globalThis.crypto est disponible sans aucun import. Dans Node.js 22, c’est totalement stable et la manière préférée d’effectuer des opérations cryptographiques. L’avantage par rapport au module hérité node:crypto : il utilise la même API que les navigateurs, rendant le code multiplateforme portable, et évite le pattern require('node:crypto') qui peut être accidentellement bundlé avec des algorithmes dépréciés.
// Modern Node.js 22 Web Crypto — no require() needed
async function deriveKey(password, salt) {
const keyMaterial = await crypto.subtle.importKey(
'raw',
new TextEncoder().encode(password),
'PBKDF2',
false,
['deriveKey']
);
return crypto.subtle.deriveKey(
{ name: 'PBKDF2', salt, iterations: 310000, hash: 'SHA-256' },
keyMaterial,
{ name: 'AES-GCM', length: 256 },
false,
['encrypt', 'decrypt']
);
}
3. ESM require() — Eliminating Dynamic Import Footguns
3. ESM require() — Éliminer les Pièges des Imports Dynamiques
Node.js 22 stabilized synchronous require() inside ES modules (previously you had to use await import() and deal with asynchronous module loading). This eliminates a class of race condition vulnerabilities that arose when code used import() dynamically to load sensitive modules — the async gap between resolution and execution could be exploited in certain threading scenarios. With synchronous require() in ESM, the module is loaded atomically.
Node.js 22 a stabilisé require() synchrone dans les modules ES (avant, il fallait utiliser await import() et gérer le chargement asynchrone des modules). Cela élimine une classe de vulnérabilités de conditions de course qui apparaissaient lorsque le code utilisait import() dynamiquement pour charger des modules sensibles — le délai asynchrone entre la résolution et l’exécution pouvait être exploité dans certains scénarios de threading. Avec require() synchrone dans ESM, le module est chargé de manière atomique.
4. Built-in Test Runner with Security Test Patterns
4. Test Runner Intégré avec Patterns de Tests de Sécurité
The node:test module in Node.js 22 supports coverage reporting, custom reporters, and mock timers out of the box — eliminating jest or mocha for many projects. From a supply chain perspective, removing a test framework dependency eliminates a significant attack vector: test packages have historically been heavily targeted by supply chain attackers because they run during npm install (postinstall hooks) and are present in every developer's machine.
Le module node:test dans Node.js 22 supporte les rapports de couverture, les reporters personnalisés et les mocks de timers par défaut — éliminant jest ou mocha pour de nombreux projets. Du point de vue de la chaîne d’approvisionnement, supprimer une dépendance de framework de test élimine un vecteur d’attaque significatif : les packages de test ont historiquement été très ciblés par les attaquants car ils s’exécutent lors de npm install (hooks postinstall) et sont présents sur chaque machine de développeur.
Node 22 vs Node 24 in July 2026: Which Should You Run?
Node 22 vs Node 24 en Juillet 2026 : Lequel Devez-Vous Exécuter ?
If you just migrated from Node 20, the answer depends on your situation. Node 22 (Maintenance LTS, supported until April 2027) is the safe, low-risk choice for existing production workloads — it receives security patches and critical bug fixes, and your migration is already done. Node 24 (Active LTS, codename Krypton, supported until April 2028) is the better choice for new projects or teams with bandwidth for a second migration.
Si vous venez de migrer depuis Node 20, la réponse dépend de votre situation. Node 22 (Maintenance LTS, supporté jusqu’à avril 2027) est le choix sûr et à faible risque pour les charges de travail de production existantes — il reçoit des correctifs de sécurité et des correctifs critiques, et votre migration est déjà faite. Node 24 (Active LTS, nom de code Krypton, supporté jusqu’à avril 2028) est le meilleur choix pour les nouveaux projets ou les équipes disposant de la bande passante pour une seconde migration.
| Feature | Node 22 | Node 24 | Fonctionnalité | Node 22 | Node 24 |
|---|---|---|---|---|---|
| LTS Phase | Maintenance | Active | Phase LTS | Maintenance | Active |
| OpenSSL version | OpenSSL 3.4 | OpenSSL 3.5 (post-quantum) | Version OpenSSL | OpenSSL 3.4 | OpenSSL 3.5 (post-quantique) |
| npm version | npm 10.x | npm v12 (scripts blocked) | Version npm | npm 10.x | npm v12 (scripts bloqués) |
| TypeScript stripping | Not available | Built-in (stable) | Stripping TypeScript | Non disponible | Intégré (stable) |
| EOL date | April 2027 | April 2028 | Date EOL | Avril 2027 | Avril 2028 |
| Migration risk | Already done (from Node 20) | Moderate (new V8, minor API changes) | Risque migration | Déjà fait (depuis Node 20) | Modéré (nouveau V8, changements API mineurs) |
Our recommendation: Stay on Node 22 if you just migrated and your workloads are stable — you have until April 2027 before EOL. Plan a migration to Node 24 for Q1 2027, or sooner if you need OpenSSL 3.5 post-quantum support or npm v12 natively bundled. If you are starting a new project today, start on Node 24.
Notre recommandation : Restez sur Node 22 si vous venez de migrer et que vos charges de travail sont stables — vous avez jusqu’à avril 2027 avant l’EOL. Planifiez une migration vers Node 24 pour le T1 2027, ou plus tôt si vous avez besoin du support post-quantique OpenSSL 3.5 ou de npm v12 bundlé nativement. Si vous démarrez un nouveau projet aujourd’hui, commencez sur Node 24.
Node.js 22 Security Hardening Checklist
Checklist de Durcissement Sécurité Node.js 22
A complete security checklist for Node.js 22 applications in production:
Une checklist de sécurité complète pour les applications Node.js 22 en production :
Runtime Security
Sécurité Runtime
- Update to Node.js 22.23.0 (fixes 12 June 2026 CVEs including 3 Permission Model bypasses)
- Mettre à jour vers Node.js 22.23.0 (corrige 12 CVE de juin 2026 dont 3 bypass du Permission Model)
- Enable
--permissionwith narrowly scoped--allow-fs-read/--allow-fs-writepaths in production - Activer
--permissionavec des chemins étroitement délimités--allow-fs-read/--allow-fs-writeen production - Do not grant
--allow-child-processunless your application explicitly needs it - Ne pas accorder
--allow-child-processsauf si votre application en a explicitement besoin - Add input size validation before all
crypto.subtle.encrypt()calls (CVE-2026-48933 mitigation) - Ajouter une validation de taille d’entrée avant tous les appels
crypto.subtle.encrypt()(atténuation CVE-2026-48933) - Disable
process.reportin production if not needed, or ensure report paths are within your--allow-fs-writescope - Désactiver
process.reporten production si non nécessaire, ou s’assurer que les chemins de rapport sont dans votre scope--allow-fs-write
Dependency Supply Chain
Chaîne d’Approvisionnement des Dépendances
- Use
npm ciinstead ofnpm installin CI/CD (lockfile enforcement) - Utiliser
npm ciplutôt quenpm installen CI/CD (respect du lockfile) - Run
npm audit signatureson every build to verify package provenance - Exécuter
npm audit signaturesà chaque build pour vérifier la provenance des packages - Use
npm audit --audit-level=highas a CI gate — fail builds on high/critical CVEs - Utiliser
npm audit --audit-level=highcomme porte CI — échouer les builds sur les CVE high/critical - Replace third-party
wswith native WebSocket where possible (one fewer supply chain risk) - Remplacer le package tiers
wspar WebSocket natif là où c’est possible (un risque de chaîne d’approvisionnement en moins) - Replace test frameworks with
node:testfor pure unit tests (removes jest/mocha fromdevDependencies) - Remplacer les frameworks de test par
node:testpour les tests unitaires purs (supprime jest/mocha desdevDependencies)
TLS & Network
TLS & Réseau
- Verify TLS minimum version:
tls.createServer({ minVersion: 'TLSv1.2' }) - Vérifier la version TLS minimale :
tls.createServer({ minVersion: 'TLSv1.2' }) - Always use
https.request({ hostname, checkServerIdentity: true })for outbound connections - Toujours utiliser
https.request({ hostname, checkServerIdentity: true })pour les connexions sortantes - Never use
rejectUnauthorized: falsein production TLS clients - Ne jamais utiliser
rejectUnauthorized: falsedans les clients TLS de production - Sanitize all user-supplied hostnames before TLS certificate validation (CVE-2026-48618 attack surface)
- Assainir tous les noms d’hôtes fournis par l’utilisateur avant la validation du certificat TLS (surface d’attaque CVE-2026-48618)
Frequently Asked Questions
Questions Fréquentes
Is Node.js 22 still supported in July 2026?
Node.js 22 est-il toujours supporté en juillet 2026 ?
Yes. Node.js 22 is in Maintenance LTS, supported through April 30, 2027. It continues to receive security patches and critical bug fixes. The June 18, 2026 release (v22.23.0) patched 12 CVEs including 2 HIGH-severity issues. It will not receive new features — those go into Node 24 (Active LTS).
Oui. Node.js 22 est en Maintenance LTS, supporté jusqu’au 30 avril 2027. Il continue de recevoir des correctifs de sécurité et des correctifs critiques. La release du 18 juin 2026 (v22.23.0) a corrigé 12 CVE dont 2 problèmes de sévérité HIGH. Il ne recevra pas de nouvelles fonctionnalités — celles-ci vont dans Node 24 (Active LTS).
Is the Node.js 22 Permission Model safe to use in production?
Le Permission Model de Node.js 22 est-il sûr à utiliser en production ?
Yes, from v22.23.0 — the three bypass CVEs (CVE-2026-48617, -48935, -48936) from June 2026 are all patched. Before 22.23.0, malicious dependencies could write files outside the allowed paths (via FileHandle.chmod or process.report) and create IPC sockets despite no --allow-net being set. Always run the latest patch release.
Oui, depuis la v22.23.0 — les trois CVE de bypass (CVE-2026-48617, -48935, -48936) de juin 2026 sont toutes corrigées. Avant la 22.23.0, des dépendances malveillantes pouvaient écrire des fichiers hors des chemins autorisés (via FileHandle.chmod ou process.report) et créer des sockets IPC malgré l’absence de --allow-net. Exécutez toujours la dernière version patch.
Should I upgrade from Node 22 to Node 24 now?
Dois-je passer de Node 22 à Node 24 maintenant ?
Not urgently. Node 22 is fully supported until April 2027. Upgrade to Node 24 if you want OpenSSL 3.5 (post-quantum TLS), npm v12 natively (install scripts blocked by default), or built-in TypeScript type stripping. For stable production services already on Node 22, plan the migration for Q1 2027.
Pas de toute urgence. Node 22 est entièrement supporté jusqu’en avril 2027. Passez à Node 24 si vous voulez OpenSSL 3.5 (TLS post-quantique), npm v12 nativement (scripts d’installation bloqués par défaut), ou le stripping de types TypeScript intégré. Pour les services de production stables déjà sur Node 22, planifiez la migration pour le T1 2027.
Does the Permission Model protect against npm supply chain attacks?
Le Permission Model protège-t-il contre les attaques de chaîne d’approvisionnement npm ?
Partially, yes. It eliminates most file system exfiltration and spawning arbitrary child processes — the two main techniques used by malicious packages in 2026 (TeamPCP, Miasma, TanStack). However, it does not prevent network exfiltration if --allow-net is set (needed for most web servers), and the three June 2026 CVEs showed it can be bypassed via specific APIs. It should be used alongside lockfile integrity checks and npm audit, not as a sole defense.
Partiellement, oui. Il élimine la plupart des exfiltrations de système de fichiers et des exécutions de processus enfants arbitraires — les deux principales techniques utilisées par les packages malveillants en 2026 (TeamPCP, Miasma, TanStack). Cependant, il ne prévient pas l’exfiltration réseau si --allow-net est défini (nécessaire pour la plupart des serveurs web), et les trois CVE de juin 2026 ont montré qu’il peut être contourné via des API spécifiques. Il doit être utilisé conjointement avec les vérifications d’intégrité du lockfile et npm audit, pas comme seule défense.
Can I replace the ws npm package with the native WebSocket in Node 22?
Puis-je remplacer le package npm ws par le WebSocket natif dans Node 22 ?
For client-side WebSocket connections (outbound), yes — the native WebSocket global is a direct replacement and spec-compliant. For server-side WebSocket (accepting inbound connections), the native implementation does not include a WebSocket server yet; you still need a package like ws or uWebSockets.js for that. The supply chain risk reduction applies to the client use case.
Pour les connexions WebSocket côté client (sortantes), oui — le WebSocket natif global est un remplacement direct et conforme aux spécifications. Pour le WebSocket côté serveur (accepter les connexions entrantes), l’implémentation native n’inclut pas encore de serveur WebSocket ; vous avez toujours besoin d’un package comme ws ou uWebSockets.js pour cela. La réduction du risque de chaîne d’approvisionnement s’applique au cas d’utilisation client.
How do I automate Node.js CVE monitoring for my projects?
Comment automatiser la surveillance des CVE Node.js pour mes projets ?
The Node.js security team releases patches roughly quarterly. Between releases, vulnerabilities in your npm dependencies accumulate silently. CVE OptiBot scans your package-lock.json or yarn.lock against the OSV.dev database daily and sends you an alert the moment a new CVE affects any of your dependencies — including Node.js runtime CVEs and third-party packages.
L’équipe de sécurité Node.js publie des correctifs environ trimestriellement. Entre les releases, les vulnérabilités dans vos dépendances npm s’accumulent silencieusement. CVE OptiBot scanne votre package-lock.json ou yarn.lock par rapport à la base de données OSV.dev quotidiennement et vous envoie une alerte dès qu’une nouvelle CVE affecte l’une de vos dépendances — y compris les CVE du runtime Node.js et les packages tiers.
Monitor Node.js CVEs in Your Projects Automatically
Surveillez les CVE Node.js dans Vos Projets Automatiquement
CVE OptiBot scans your package-lock.json daily against OSV.dev and alerts you the moment a new vulnerability — like the June 2026 Permission Model bypasses — affects your dependencies. No code access required.
CVE OptiBot scanne votre package-lock.json quotidiennement via OSV.dev et vous alerte dès qu’une nouvelle vulnérabilité — comme les bypasses du Permission Model de juin 2026 — affecte vos dépendances. Aucun accès au code requis.
Related Articles
Articles Connexes
- Node.js 20 is EOL: 12 CVEs Unpatched & Migration Guide to Node 22/24 →Node.js 20 en fin de vie : 12 CVE sans correctif & Guide de Migration vers Node 22/24 →
- Node.js & Express Security Vulnerabilities in 2026: 16 CVEs →Vulnérabilités Node.js & Express en 2026 : 16 CVE →
- npm v12 Full Migration Guide in 2026: Allowlist Setup & Team Rollout →Guide Complet de Migration npm v12 en 2026 : Allowlist & Rollout Équipe →
- npm Vulnerabilities Monitoring →Surveillance des Vulnérabilités npm →
- CVE Monitoring for Developers →Surveillance CVE pour Développeurs →