Every HTTPS connection your Node.js application makes or accepts runs through OpenSSL — the cryptographic library bundled directly into the Node.js binary. When OpenSSL has a vulnerability, Node.js inherits it. In January 2026, the OpenSSL project disclosed 12 CVEs in a single advisory, including a High-severity pre-authentication stack buffer overflow (CVE-2025-15467) and a Moderate PKCS#12 parsing flaw (CVE-2025-11187). Then in March 2026, a quieter but more strategically significant vulnerability appeared: CVE-2026-2673, which causes TLS 1.3 servers running OpenSSL 3.5 or 3.6 to silently fall back from post-quantum hybrid key exchange to classical elliptic-curve cryptography — precisely when you thought you were hardening forward secrecy.
Chaque connexion HTTPS que votre application Node.js établit ou accepte passe par OpenSSL — la bibliothèque cryptographique intégrée directement dans le binaire Node.js. Quand OpenSSL est vulnérable, Node.js l’est aussi. En janvier 2026, le projet OpenSSL a divulgué 12 CVE dans un seul advisory, dont un stack buffer overflow pré-authentification de sévérité High (CVE-2025-15467) et une faille PKCS#12 Moderate (CVE-2025-11187). Puis en mars 2026 est apparue une vulnérabilité plus discrète mais plus significative stratégiquement : CVE-2026-2673, qui pousse les serveurs TLS 1.3 sur OpenSSL 3.5 ou 3.6 à tomber silencieusement du chiffrement hybride post-quantique vers la cryptographie à courbes elliptiques classique — exactement quand vous pensiez renforcer la confidentialité persistante.
This article covers every 2026 OpenSSL and Node.js TLS CVE, explains how to check which OpenSSL version is bundled in your Node.js binary, and provides a production-grade hardening checklist: TLS 1.3 configuration, HSTS deployment, certificate management with Let's Encrypt, and how automated dependency scanning catches TLS-critical packages before they reach production.
Cet article couvre toutes les CVE OpenSSL et TLS Node.js de 2026, explique comment vérifier quelle version d’OpenSSL est intégrée dans votre binaire Node.js, et fournit une checklist de durcissement production : configuration TLS 1.3, déploiement HSTS, gestion des certificats avec Let’s Encrypt, et comment le scan automatisé des dépendances détecte les packages critiques pour TLS avant qu’ils n’atteignent la production.
How OpenSSL Is Bundled Into Node.js — and Why It Matters
Comment OpenSSL Est Intégré dans Node.js — et Pourquoi C’est Important
Unlike most programming languages that link OpenSSL dynamically at runtime, Node.js bundles a specific version of OpenSSL directly into its binary at compile time. This means the TLS security posture of your Node.js server is determined by the Node.js version you deploy, not by the system OpenSSL. Upgrading your Linux distribution's OpenSSL package has no effect on the OpenSSL version your Node.js process uses.
Contrairement à la plupart des langages qui lient OpenSSL dynamiquement à l’exécution, Node.js intègre une version spécifique d’OpenSSL directement dans son binaire lors de la compilation. Cela signifie que la posture de sécurité TLS de votre serveur Node.js est déterminée par la version de Node.js déployée, pas par le système OpenSSL. Mettre à jour le paquet OpenSSL de votre distribution Linux n’a aucun effet sur la version OpenSSL utilisée par votre processus Node.js.
To check the exact OpenSSL version bundled in your Node.js installation:
Pour vérifier la version exacte d’OpenSSL intégrée dans votre installation Node.js :
# Check Node.js bundled OpenSSL version
node -e "console.log('Node.js:', process.version, '| OpenSSL:', process.versions.openssl)"
# Example output on Node.js 22.22.2 (LTS, May 2026)
# Node.js: v22.22.2 | OpenSSL: 3.0.16+quic
# Check all bundled versions at once
node -e "console.log(JSON.stringify(process.versions, null, 2))"
The +quic suffix indicates Node.js uses a patched version of OpenSSL with QUIC protocol support. The base version number (e.g., 3.0.16) determines which CVEs apply. Node.js 22.x and 24.x use OpenSSL 3.0.x (patched), while Node.js 25.x and above may bundle OpenSSL 3.4+ which introduced the new key exchange tuple syntax affected by CVE-2026-2673.
Le suffixe +quic indique que Node.js utilise une version patchée d’OpenSSL avec le support du protocole QUIC. Le numéro de version de base (ex. 3.0.16) détermine quelles CVE s’appliquent. Node.js 22.x et 24.x utilisent OpenSSL 3.0.x (patché), tandis que Node.js 25.x et au-delà peuvent intégrer OpenSSL 3.4+ qui introduit la nouvelle syntaxe de tuples d’échange de clés affectée par CVE-2026-2673.
OpenSSL January 2026 Advisory: 12 CVEs, One High-Severity RCE
Advisory OpenSSL Janvier 2026 : 12 CVE, Une de Sévérité High avec Risque RCE
On January 27, 2026, the OpenSSL project published its largest single advisory to date: 12 CVEs affecting OpenSSL 1.0.2, 1.1.1, and the 3.x series (3.0 through 3.6). The disclosure included one High-severity vulnerability capable of denial-of-service and potential remote code execution, one Moderate, and 10 Low-severity issues. This advisory was notable because it was partially sourced from an AI-assisted security audit by the AISLE team, which reportedly identified all 12 vulnerabilities.
Le 27 janvier 2026, le projet OpenSSL a publié son plus grand advisory à ce jour : 12 CVE affectant OpenSSL 1.0.2, 1.1.1 et la série 3.x (3.0 à 3.6). La divulgation comportait une vulnérabilité de sévérité High capable de déni de service et d’exécution de code à distance potentielle, une Moderate, et 10 Low. Cet advisory était notable car il était en partie issu d’un audit de sécurité assisté par IA par l’équipe AISLE, qui aurait identifié les 12 vulnérabilités.
| CVE | Severity | Description | Node.js Impact | CVE | Sévérité | Description | Impact Node.js |
|---|---|---|---|---|---|---|---|
| CVE-2025-15467 | HighHigh | Stack buffer overflow in CMS AuthEnvelopedData AEAD parsing (OpenSSL 3.0–3.6). Crafted CMS message → crash or potential RCE. | Only if app parses untrusted CMS/PKCS#7 messages directly via OpenSSL APIs | Stack buffer overflow dans le parsing CMS AuthEnvelopedData AEAD (OpenSSL 3.0–3.6). Message CMS craftisé → crash ou RCE potentiel. | Uniquement si l’app parse des messages CMS/PKCS#7 non fiables via les API OpenSSL directement | ||
| CVE-2025-11187 | ModerateModerate | Stack buffer overflow in PKCS#12 PBMAC1 MAC verification when PBKDF2 key length is attacker-controlled. DoS or potential RCE (OpenSSL 3.4–3.6). | Affects apps accepting untrusted PKCS#12 files via the pfx TLS option |
Stack buffer overflow dans la vérification PKCS#12 PBMAC1 quand la longueur de clé PBKDF2 est contrôlée par un attaquant. DoS ou RCE potentiel (OpenSSL 3.4–3.6). | Affecte les apps acceptant des fichiers PKCS#12 non fiables via l’option TLS pfx |
||
| 10 Low CVEs (Jan 2026) | Null pointer dereferences, incorrect error handling, and edge-case parser bugs in X.509 and PKCS structures. Real-world exploitability is low for typical Node.js apps. | 10 CVE Low (janv. 2026) | Déréférences de pointeurs null, gestion d’erreurs incorrecte, bugs de parseur dans les structures X.509 et PKCS. L’exploitabilité réelle est faible pour les apps Node.js typiques. | ||||
The Node.js project assessed the January 2026 OpenSSL advisory and concluded that three CVEs affect Node.js at Low to Moderate severity. All three relate to processing PFX (PKCS#12) certificate files via the pfx option in Node.js TLS configuration. Since PFX files typically come from trusted local sources (your own certificate infrastructure), the real-world attack surface in standard Node.js HTTPS servers is limited. However, any application that accepts PFX files from user input or external APIs should treat this as critical.
Le projet Node.js a évalué l’advisory OpenSSL de janvier 2026 et conclu que trois CVE affectent Node.js avec une sévérité Low à Moderate. Toutes trois concernent le traitement de fichiers PFX (PKCS#12) via l’option pfx dans la configuration TLS Node.js. Comme les fichiers PFX proviennent généralement de sources locales de confiance (votre propre infrastructure de certificats), la surface d’attaque réelle pour les serveurs HTTPS Node.js standard est limitée. Cependant, toute application acceptant des fichiers PFX depuis des entrées utilisateur ou des API externes doit traiter cela comme critique.
Node.js January 2026 Security Release: TLS Memory Leak & PSK DoS
Release de Sécurité Node.js Janvier 2026 : Fuite Mémoire TLS & DoS PSK
On January 13, 2026, the Node.js project released security patches across all active lines (v20.20.0, v22.22.0, v24.13.0, v25.3.0), addressing 8 CVEs. Two of the most significant for TLS-heavy applications were:
Le 13 janvier 2026, le projet Node.js a publié des correctifs de sécurité sur toutes les branches actives (v20.20.0, v22.22.0, v24.13.0, v25.3.0), corrigeant 8 CVE. Les deux plus significatives pour les applications à fort usage TLS étaient :
CVE-2025-59464
MEDIUM
Memory Leak — TLS Certificate Processing
Fuite Mémoire — Traitement Certificat TLS
A memory leak in Node.js’s OpenSSL integration occurs when converting X.509 certificate fields to UTF-8 without freeing the allocated buffer. When applications call socket.getPeerCertificate(true), each certificate field leaks memory. An attacker sending repeated TLS connections can trigger steady memory growth leading to eventual process crash via OOM.
Une fuite mémoire dans l’intégration OpenSSL de Node.js se produit lors de la conversion des champs de certificats X.509 en UTF-8 sans libérer le buffer alloué. Quand les applications appellent socket.getPeerCertificate(true), chaque champ de certificat fuit en mémoire. Un attaquant envoyant des connexions TLS répétées peut déclencher une croissance progressive de la mémoire menant à un crash du processus par OOM.
Impact: Applications using mutual TLS (mTLS) that call getPeerCertificate(true) on each request. Standard HTTPS servers without client certificate verification are not affected.
Impact : Applications utilisant le TLS mutuel (mTLS) qui appellent getPeerCertificate(true) à chaque requête. Les serveurs HTTPS standard sans vérification de certificat client ne sont pas affectés.
CVE-2026-21637
HIGH
TLS PSK/ALPN Callback DoS — Process Crash
DoS Callback TLS PSK/ALPN — Crash de Processus
When a TLS PSK (pre-shared key) or ALPN negotiation callback throws an exception, Node.js fails to catch it properly, propagating an unhandled error that crashes the entire process. An unauthenticated attacker can trigger this with a single malformed TLS ClientHello. The March 2026 security release addressed an incomplete fix: the loadSNI() path in _tls_wrap.js was not covered by the January patch, requiring a second round of fixes.
Quand un callback de négociation TLS PSK (pre-shared key) ou ALPN lève une exception, Node.js ne la capture pas correctement, propageant une erreur non gérée qui fait crasher tout le processus. Un attaquant non authentifié peut déclencher ceci avec un seul TLS ClientHello mal formé. La release de sécurité de mars 2026 a résolu une correction incomplète : le chemin loadSNI() dans _tls_wrap.js n’était pas couvert par le patch de janvier, nécessitant un second correctif.
Fix: Upgrade to v20.20.2, v22.22.2, v24.14.1, or v25.8.2 (March 24, 2026 release) — the January patch was incomplete. This CVE is also covered in detail in our Node.js & Express Security Vulnerabilities 2026 article.
Correctif : Passer à v20.20.2, v22.22.2, v24.14.1, ou v25.8.2 (release du 24 mars 2026) — le patch de janvier était incomplet. Cette CVE est également couverte en détail dans notre article Vulnérabilités Node.js & Express 2026.
CVE-2026-2673: The Post-Quantum TLS Fallback You Didn’t Know About
CVE-2026-2673 : Le Repli Post-Quantique TLS Dont Vous N’Étiez Pas Conscient
This is the most strategically significant OpenSSL vulnerability of 2026 — not because it allows immediate exploitation, but because it silently undermines post-quantum security hardening efforts. CVE-2026-2673 affects OpenSSL 3.5 and 3.6, the versions that introduced the new key exchange “tuple” syntax designed to prefer post-quantum hybrid groups like X25519MLKEM768.
C’est la vulnérabilité OpenSSL la plus significative stratégiquement de 2026 — non pas parce qu’elle permet une exploitation immédiate, mais parce qu’elle compromet silencieusement les efforts de durcissement post-quantique. CVE-2026-2673 affecte OpenSSL 3.5 et 3.6, les versions qui ont introduit la nouvelle syntaxe de « tuples » d’échange de clés conçue pour préférer les groupes hybrides post-quantiques comme X25519MLKEM768.
Technical Deep Dive: What Actually Breaks
Analyse Technique : Ce Qui Se Passe Réellement
OpenSSL 3.5+ introduced a new group configuration syntax that partitions key exchange groups into tuples — buckets representing roughly equivalent security levels. When a server’s configuration uses the DEFAULT keyword (which pulls in OpenSSL’s built-in group list), the default list loses its tuple structure due to an implementation defect. The result:
OpenSSL 3.5+ a introduit une nouvelle syntaxe de configuration de groupes qui partitionne les groupes d’échange de clés en tuples — des buckets représentant des niveaux de sécurité à peu près équivalents. Quand la configuration d’un serveur utilise le mot-clé DEFAULT (qui intègre la liste de groupes intégrée d’OpenSSL), la liste par défaut perd sa structure de tuples en raison d’un défaut d’implémentation. Résultat :
- A TLS 1.3 client sending only a classical X25519 keyshare will not receive a HelloRetryRequest asking it to upgrade to X25519MLKEM768
- The server silently accepts the weaker classical key exchange instead of negotiating post-quantum hybrid security
- From a monitoring perspective, the connection succeeds and looks healthy — there is no error, no warning, no log entry
- Un client TLS 1.3 envoyant uniquement un keyshare X25519 classique ne recevra pas de HelloRetryRequest lui demandant de passer à X25519MLKEM768
- Le serveur accepte silencieusement l’échange de clés classique plus faible au lieu de négocier la sécurité hybride post-quantique
- Du point de vue du monitoring, la connexion réussit et semble saine — aucune erreur, aucun avertissement, aucune entrée de log
Affected versions: OpenSSL 3.5 and 3.6. OpenSSL 3.4, 3.3, 3.0, 1.1.1, and 1.0.2 are not affected (they predate the tuple syntax). Since current Node.js LTS versions (22.x, 24.x) bundle OpenSSL 3.0.x, they are not directly affected. However, Node.js 25.x+ users and developers testing against the OpenSSL 3.5/3.6 series should apply patches: OpenSSL 3.5.6 and 3.6.2 once released.
Versions affectées : OpenSSL 3.5 et 3.6. OpenSSL 3.4, 3.3, 3.0, 1.1.1 et 1.0.2 ne sont pas affectés (ils précèdent la syntaxe de tuples). Puisque les versions Node.js LTS actuelles (22.x, 24.x) intègrent OpenSSL 3.0.x, elles ne sont pas directement affectées. Cependant, les utilisateurs de Node.js 25.x+ et les développeurs testant contre la série OpenSSL 3.5/3.6 doivent appliquer les correctifs : OpenSSL 3.5.6 et 3.6.2 une fois publiés.
Configuring TLS 1.3 Correctly in Node.js Production
Configurer TLS 1.3 Correctement dans Node.js en Production
Node.js exposes OpenSSL configuration through the tls module and the https.createServer() / https.request() options. The following configuration enforces TLS 1.3 (with TLS 1.2 as a fallback for older clients), disables weak cipher suites, and applies strict certificate validation:
Node.js expose la configuration OpenSSL via le module tls et les options https.createServer() / https.request(). La configuration suivante impose TLS 1.3 (avec TLS 1.2 comme repli pour les anciens clients), désactive les suites de chiffrement faibles et applique une validation stricte des certificats :
const https = require('https');
const fs = require('fs');
const tlsOptions = {
// Certificate files (use Let's Encrypt in production)
cert: fs.readFileSync('/path/to/fullchain.pem'),
key: fs.readFileSync('/path/to/privkey.pem'),
// Enforce TLS 1.2 minimum — disables TLS 1.0 and TLS 1.1
minVersion: 'TLSv1.2',
// Allow TLS 1.3 as maximum (Node.js default since v12)
maxVersion: 'TLSv1.3',
// Explicitly prefer server cipher order (prevents downgrade by client)
honorCipherOrder: true,
// Disable weak cipher suites while keeping TLS 1.3 defaults
ciphers: [
// TLS 1.3 cipher suites (auto-negotiated, no action needed)
'TLS_AES_256_GCM_SHA384',
'TLS_AES_128_GCM_SHA256',
'TLS_CHACHA20_POLY1305_SHA256',
// TLS 1.2 fallback — strong suites only
'ECDHE-ECDSA-AES256-GCM-SHA384',
'ECDHE-RSA-AES256-GCM-SHA384',
'ECDHE-ECDSA-CHACHA20-POLY1305',
'ECDHE-RSA-CHACHA20-POLY1305',
// Explicitly exclude RC4, DES, 3DES, EXPORT, NULL
'!RC4', '!DES', '!3DES', '!EXPORT', '!NULL', '!aNULL', '!eNULL',
].join(':'),
// Reject unauthorized certificates for outgoing requests
rejectUnauthorized: true,
};
const server = https.createServer(tlsOptions, (req, res) => {
res.writeHead(200);
res.end('Secure connection established');
});
server.listen(443);
⚠ Never set rejectUnauthorized: false in production
⚠ Ne jamais mettre rejectUnauthorized: false en production
Setting rejectUnauthorized: false disables certificate validation entirely, making your app vulnerable to MITM attacks. It is sometimes added during development to skip self-signed cert errors, but frequently committed to production code by mistake. CVE OptiBot scans your lockfiles for packages like axios, node-fetch, and got that may propagate insecure TLS defaults.
Mettre rejectUnauthorized: false désactive entièrement la validation des certificats, rendant votre app vulnérable aux attaques MITM. C’est parfois ajouté en développement pour contourner les erreurs de certificats auto-signés, mais fréquemment commité par erreur en production. CVE OptiBot scanne vos lockfiles pour les packages comme axios, node-fetch et got qui peuvent propager des défauts TLS non sécurisés.
HSTS & Security Headers with helmet.js
HSTS & En-têtes de Sécurité avec helmet.js
HTTP Strict Transport Security (HSTS) tells browsers to always connect to your domain over HTTPS — even if the user types http://. This prevents protocol downgrade attacks and cookie hijacking. Combined with HSTS preloading, it removes the first-visit vulnerability window entirely. In a Node.js/Express application, the easiest way to deploy HSTS and other security headers is via helmet.js:
HTTP Strict Transport Security (HSTS) indique aux navigateurs de toujours se connecter à votre domaine via HTTPS — même si l’utilisateur tape http://. Cela prévient les attaques de downgrade de protocole et le hijacking de cookies. Combiné au préchargement HSTS, cela supprime entièrement la fenêtre de vulnérabilité de la première visite. Dans une application Node.js/Express, la manière la plus simple de déployer HSTS et d’autres en-têtes de sécurité est via helmet.js :
const express = require('express');
const helmet = require('helmet');
const app = express();
// Enable all security headers including HSTS
app.use(helmet({
// HSTS: 2 years, include subdomains, enable preload
hsts: {
maxAge: 63072000, // 2 years in seconds
includeSubDomains: true,
preload: true, // Submit to HSTS preload list
},
// Content Security Policy — blocks XSS and data injection
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"], // adjust as needed
imgSrc: ["'self'", 'data:', 'https:'],
},
},
// Prevent clickjacking
frameguard: { action: 'deny' },
// Disable MIME type sniffing
noSniff: true,
// Disable X-Powered-By: Express header
hidePoweredBy: true,
}));
// Force HTTPS redirect in production
if (process.env.NODE_ENV === 'production') {
app.use((req, res, next) => {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(301, `https://${req.headers.host}${req.url}`);
}
next();
});
}
Certificate Management: Let’s Encrypt, ACME, and Renewal Automation
Gestion des Certificats : Let’s Encrypt, ACME et Automatisation du Renouvellement
In 2026, the cleanest certificate management approach for Node.js production deployments remains ACME with Let’s Encrypt, augmented with automated renewal and monitoring. The risks of manual certificate management have been well-documented: expired certificates that cause service outages (including at major platforms like Facebook and LinkedIn historically), certificate authority compromises, and private key exposure.
En 2026, l’approche la plus propre pour la gestion des certificats dans les déploiements Node.js en production reste ACME avec Let’s Encrypt, augmenté d’un renouvellement automatisé et d’un monitoring. Les risques de la gestion manuelle des certificats sont bien documentés : certificats expirés causant des pannes de service, compromissions d’autorités de certification, et exposition de clés privées.
# Install Certbot (Let's Encrypt ACME client)
sudo apt install certbot python3-certbot-nginx
# Obtain certificate and auto-configure Nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# Verify auto-renewal timer is active
sudo systemctl status certbot.timer
# Test renewal without actually renewing
sudo certbot renew --dry-run
# Check certificate expiry for all managed certs
sudo certbot certificates
For Node.js applications that terminate TLS directly (without Nginx in front), use the acme-client npm package for programmatic certificate management:
Pour les applications Node.js qui terminent TLS directement (sans Nginx devant), utilisez le package npm acme-client pour la gestion programmatique des certificats :
# Install acme-client (official Let's Encrypt compatible ACME client)
npm install acme-client
# Check for known vulnerabilities before installing
npx audit-ci --high # or: npm audit --audit-level=high
Certificate Pinning: Use with Caution
Certificate Pinning : À Utiliser avec Précaution
Certificate pinning (embedding a specific certificate or public key hash in your client code) sounds like a strong security measure, but in practice it creates brittle deployments. When your CA rotates intermediates, issues replacement certificates, or when you simply renew an expiring certificate, pinned clients break silently. The current consensus for 2026: use certificate pinning only in tightly controlled environments (mobile SDKs talking to your own API, mTLS internal services) where you have a clear key rotation story. For public-facing web apps: proper TLS configuration + HSTS preloading is sufficient.
Le certificate pinning (intégration d’un hash de certificat ou de clé publique spécifique dans votre code client) semble une mesure de sécurité forte, mais en pratique il crée des déploiements fragiles. Quand votre CA fait tourner ses intermédiaires, émet des certificats de remplacement, ou quand vous renouvelez simplement un certificat expirant, les clients pinés se cassent silencieusement. Le consensus actuel pour 2026 : utilisez le certificate pinning uniquement dans des environnements contrôlés (SDK mobiles parlant à votre propre API, services internes mTLS) où vous avez une stratégie claire de rotation de clés. Pour les apps web publiques : une configuration TLS correcte + HSTS preloading est suffisant.
Auditing Your npm Dependencies for TLS Security Risks
Auditer Vos Dépendances npm pour les Risques de Sécurité TLS
OpenSSL CVEs in Node.js are only one side of the TLS risk surface. The other side is npm packages that make outbound HTTPS requests — axios, node-fetch, got, undici, superagent — and the TLS defaults they inherit or override. Several historical CVEs in these packages have involved insecure TLS defaults, certificate validation bypass, or redirect-based header leaks:
Les CVE OpenSSL dans Node.js ne représentent qu’un côté de la surface de risque TLS. L’autre côté concerne les packages npm qui font des requêtes HTTPS sortantes — axios, node-fetch, got, undici, superagent — et les défauts TLS qu’ils héritent ou surpassent. Plusieurs CVE historiques dans ces packages impliquaient des défauts TLS non sécurisés, des contournements de validation de certificats, ou des fuites d’en-têtes via des redirections :
| Package | CVE | TLS Risk | Downloads/week | Package | CVE | Risque TLS | Téléchargements/sem |
|---|---|---|---|---|---|---|---|
| axios | CVE-2023-32681 | SSRF header leak: Authorization header forwarded on cross-origin redirects |
100M+ | axios | CVE-2023-32681 | Fuite SSRF : en-tête Authorization transmis lors de redirections cross-origin |
100M+ |
| undici | CVE-2025-52617 | Request smuggling via CRLF injection in headers before TLS handshake | 80M+ | undici | CVE-2025-52617 | Smuggling de requêtes via injection CRLF dans les en-têtes avant le handshake TLS | 80M+ |
| node-fetch | CVE-2022-0235 | Exposure of sensitive headers to untrusted hosts on redirect (still common in legacy codebases) | 50M+ | node-fetch | CVE-2022-0235 | Exposition d’en-têtes sensibles à des hôtes non fiables lors de redirections (fréquent dans les codebases legacy) | 50M+ |
Keeping these packages updated is not a one-time task. New CVEs affecting TLS-related npm packages appear regularly, and the 2026 Axios supply chain compromise (March 31, 2026) showed that even the act of upgrading Axios can introduce malware if the maintainer account is compromised. This is precisely why continuous dependency monitoring — scanning your package-lock.json or yarn.lock daily against the OSV.dev database — is more reliable than periodic manual audits.
Maintenir ces packages à jour n’est pas une tâche ponctuelle. De nouvelles CVE affectant les packages npm liés à TLS apparaissent régulièrement, et la compromission supply chain d’Axios en 2026 (31 mars 2026) a montré que même l’acte de mettre à jour Axios peut introduire des malwares si le compte du mainteneur est compromis. C’est précisément pour cela que le monitoring continu des dépendances — scannant votre package-lock.json ou yarn.lock quotidiennement contre la base OSV.dev — est plus fiable que des audits manuels périodiques.
# Quick TLS-focused audit of your project dependencies
npm audit --audit-level=moderate
# Check specifically for known CVEs in HTTP client packages
npm ls axios node-fetch got undici superagent 2>/dev/null | grep -E "axios|node-fetch|got|undici|superagent"
# Check OpenSSL version bundled in your Node.js
node -e "console.log('OpenSSL:', process.versions.openssl)"
# Check all active Node.js CVEs (requires npm install -g is-my-node-vulnerable)
npx is-my-node-vulnerable
Node.js Version TLS & OpenSSL Status Matrix (May 2026)
Matrice de Statut TLS & OpenSSL des Versions Node.js (Mai 2026)
| Node.js Version | Status | OpenSSL | TLS 1.3 | CVE-2026-2673 | Version Node.js | Statut | OpenSSL | TLS 1.3 | CVE-2026-2673 |
|---|---|---|---|---|---|---|---|---|---|
| Node.js 20 | EOLFin de vie | 3.0.x | ✓ Yes✓ Oui | Not affectedNon affecté | Node.js 20 | EOLFin de vie | 3.0.x | ✓ Oui | Non affecté |
| Node.js 22 | LTS | 3.0.x | ✓ | Not affectedNon affecté | |||||
| Node.js 24 | CurrentActuelle | 3.0.x | ✓ | Not affectedNon affecté | |||||
| Node.js 25+ | ExperimentalExpérimental | 3.4+ | ✓ | Check versionVérifier la version |
Node.js TLS Hardening Checklist for 2026
Checklist de Durcissement TLS Node.js pour 2026
Frequently Asked Questions
Questions Fréquentes
Does upgrading my system’s OpenSSL package fix vulnerabilities in Node.js?
La mise à jour du paquet OpenSSL de mon système corrige-t-elle les vulnérabilités dans Node.js ?
No. Node.js bundles a specific OpenSSL version directly in its binary at compile time. apt upgrade openssl or yum update openssl does not affect the OpenSSL used by Node.js. To update the OpenSSL version in Node.js, you must upgrade the Node.js binary itself to a release that bundles a patched OpenSSL. Check your current version with node -e "console.log(process.versions.openssl)".
Non. Node.js intègre une version spécifique d’OpenSSL directement dans son binaire lors de la compilation. apt upgrade openssl ou yum update openssl n’affecte pas l’OpenSSL utilisé par Node.js. Pour mettre à jour la version OpenSSL dans Node.js, vous devez mettre à jour le binaire Node.js lui-même vers une release qui intègre un OpenSSL corrigé. Vérifiez votre version actuelle avec node -e "console.log(process.versions.openssl)".
Is CVE-2026-2673 dangerous for typical Node.js production servers?
CVE-2026-2673 est-elle dangereuse pour les serveurs Node.js de production typiques ?
Not immediately. CVE-2026-2673 affects OpenSSL 3.5 and 3.6, which are not yet bundled in Node.js LTS releases (22.x and 24.x use OpenSSL 3.0.x). Its risk is forward-looking: if you’re running Node.js 25.x or testing against OpenSSL 3.5/3.6, the vulnerability causes your TLS 1.3 server to silently fall back from post-quantum hybrid key exchange (X25519MLKEM768) to classical X25519 — weakening forward secrecy without any error or log entry. Apply patches when OpenSSL 3.5.6 and 3.6.2 are released.
Pas immédiatement. CVE-2026-2673 affecte OpenSSL 3.5 et 3.6, qui ne sont pas encore intégrés dans les releases LTS de Node.js (22.x et 24.x utilisent OpenSSL 3.0.x). Son risque est prospectif : si vous tournez sur Node.js 25.x ou testez contre OpenSSL 3.5/3.6, la vulnérabilité fait silencieusement tomber votre serveur TLS 1.3 de l’échange de clés hybride post-quantique (X25519MLKEM768) vers X25519 classique — affaiblissant la confidentialité persistante sans aucune erreur ni entrée de log. Appliquez les correctifs dès qu’OpenSSL 3.5.6 et 3.6.2 sont disponibles.
Should I use TLS 1.3 exclusively and disable TLS 1.2 on my Node.js server?
Dois-je utiliser uniquement TLS 1.3 et désactiver TLS 1.2 sur mon serveur Node.js ?
It depends on your audience. TLS 1.3 delivers better performance and security, but some enterprise clients (behind corporate proxies or using legacy middleware) still require TLS 1.2. The recommended approach for 2026: set minVersion: 'TLSv1.2' to allow both TLS 1.2 and 1.3, while disabling TLS 1.0 and 1.1. Always disable TLS 1.0 and 1.1 — they have known vulnerabilities (BEAST, POODLE, CRIME) and both PCI DSS 4.0 and NIST guidelines require their removal.
Cela dépend de votre audience. TLS 1.3 offre de meilleures performances et sécurité, mais certains clients entreprise (derrière des proxies d’entreprise ou utilisant des middlewares legacy) requièrent encore TLS 1.2. L’approche recommandée pour 2026 : définir minVersion: 'TLSv1.2' pour autoriser TLS 1.2 et 1.3, tout en désactivant TLS 1.0 et 1.1. Désactivez toujours TLS 1.0 et 1.1 — ils ont des vulnérabilités connues (BEAST, POODLE, CRIME) et PCI DSS 4.0 ainsi que les recommandations NIST exigent leur suppression.
How do I know if my npm packages have TLS-related CVEs?
Comment savoir si mes packages npm ont des CVE liées à TLS ?
Run npm audit for a point-in-time check. For continuous coverage, use a tool that monitors your package-lock.json daily and alerts on new CVEs: CVE OptiBot scans your lockfiles against the OSV.dev database and sends alerts when a package you’re using receives a new CVE — including TLS-critical packages like axios, undici, got, and node-fetch. This is especially important after supply chain events like the March 2026 Axios compromise, where attackers published malicious versions to npm.
Lancez npm audit pour une vérification instantanée. Pour une couverture continue, utilisez un outil qui surveille votre package-lock.json quotidiennement et alerte sur les nouvelles CVE : CVE OptiBot scanne vos lockfiles contre la base OSV.dev et envoie des alertes quand un package que vous utilisez reçoit une nouvelle CVE — y compris les packages critiques pour TLS comme axios, undici, got et node-fetch. C’est particulièrement important après des événements supply chain comme la compromission Axios de mars 2026, où des attaquants ont publié des versions malveillantes sur npm.
What’s the difference between the Node.js tls module and OpenSSL’s configuration?
Quelle est la différence entre le module tls de Node.js et la configuration d’OpenSSL ?
Node.js’s tls module is a JavaScript API that wraps OpenSSL’s C library. When you set options like minVersion, ciphers, or honorCipherOrder in Node.js, you’re configuring OpenSSL through this wrapper. Some OpenSSL options are not exposed through the Node.js API and require environment variables (e.g., OPENSSL_CONF) or the --openssl-config flag when starting Node.js. For most production use cases, the Node.js tls options are sufficient and the recommended approach.
Le module tls de Node.js est une API JavaScript qui enveloppe la bibliothèque C d’OpenSSL. Quand vous définissez des options comme minVersion, ciphers ou honorCipherOrder dans Node.js, vous configurez OpenSSL à travers ce wrapper. Certaines options OpenSSL ne sont pas exposées via l’API Node.js et nécessitent des variables d’environnement (ex. OPENSSL_CONF) ou le flag --openssl-config au démarrage de Node.js. Pour la plupart des cas d’usage en production, les options tls de Node.js sont suffisantes et l’approche recommandée.
Monitor Your npm Dependencies for TLS-Critical CVEs Automatically
Surveillez Vos Dépendances npm pour les CVE Critiques TLS Automatiquement
OpenSSL CVEs, Axios supply chain attacks, undici request smuggling — new vulnerabilities in your HTTP and TLS dependencies appear without warning. CVE OptiBot scans your package-lock.json or yarn.lock daily against the OSV.dev database and sends immediate alerts when a package you depend on receives a new CVE. No code access required. Supports npm, Python, PHP, Ruby, Rust, Go, and Java ecosystems.
CVE OpenSSL, attaques supply chain Axios, smuggling de requêtes undici — de nouvelles vulnérabilités dans vos dépendances HTTP et TLS apparaissent sans avertissement. CVE OptiBot scanne votre package-lock.json ou yarn.lock quotidiennement contre la base OSV.dev et envoie des alertes immédiates quand un package dont vous dépendez reçoit une nouvelle CVE. Aucun accès au code requis. Supporte les écosystèmes npm, Python, PHP, Ruby, Rust, Go et Java.