Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-48928

CVE-2026-48928: Node.js Auth Bypass Vulnerability

CVE-2026-48928 is an authentication bypass flaw in Node.js caused by hostname matching inconsistency in multi-context mTLS setups. This article covers the technical details, affected versions, impact, and mitigation.

Published:

CVE-2026-48928 Overview

CVE-2026-48928 is an access control weakness [CWE-284] in Node.js hostname matching logic. The inconsistency allows a trust-policy bypass in multi-context mutual TLS (mTLS) deployments. An authenticated client can present a certificate that is evaluated inconsistently across TLS contexts, causing Node.js to trust a peer that a stricter policy should reject.

The issue affects all supported release lines: Node.js 22, Node.js 24, and Node.js 26. Exploitation requires network access and low-privilege authentication but no user interaction.

Critical Impact

An attacker with a valid certificate in one mTLS context can bypass hostname-based trust policies and access resources scoped to a different context, breaking tenant isolation in multi-context TLS deployments.

Affected Products

  • Node.js 22 (through 22.22.3)
  • Node.js 24 (through 24.16.0)
  • Node.js 26 (through 26.3.0)

Discovery Timeline

  • 2026-06-26 - CVE-2026-48928 published to the National Vulnerability Database (NVD)
  • 2026-06-26 - Last updated in the NVD database

Technical Details for CVE-2026-48928

Vulnerability Analysis

The vulnerability originates in how Node.js compares certificate identifiers to expected hostnames during TLS peer validation. When an application configures multiple tls.SecureContext objects, for example separate contexts per tenant or per Server Name Indication (SNI) endpoint, the hostname matcher does not enforce identical parsing rules across all validation paths.

An attacker who holds a certificate valid in one context can craft or select subject fields that satisfy the relaxed matcher but should be rejected by the stricter policy applied to another context. The result is a trust-policy bypass rather than a full authentication bypass, because a valid client certificate is still required.

The vulnerability enables limited confidentiality and integrity impact on data reachable through the wrongly trusted context. Availability is not affected.

Root Cause

The root cause is inconsistent hostname matching between certificate identity extraction and policy evaluation code paths. The Subject Alternative Name (SAN) and Common Name (CN) handling produces different results depending on which validation entry point is used. This mismatch is classified under [CWE-284] Improper Access Control.

Attack Vector

An attacker requires network reachability to a Node.js service using mTLS with more than one tls.SecureContext. The attacker must possess a client certificate that is legitimate for at least one context. By connecting with SNI values or certificate identifiers that exploit the parser inconsistency, the attacker induces Node.js to apply the wrong trust policy and accept the connection under a context to which the certificate should not grant access.

No public proof-of-concept exploit or CISA Known Exploited Vulnerabilities (KEV) listing exists at the time of publication. The Exploit Prediction Scoring System (EPSS) probability is 0.256%.

The vulnerability manifests in the internal hostname-verification routine invoked by Node.js TLS peer identity checks. Refer to the Node.js June 2026 Security Releases advisory for implementation-level details.

Detection Methods for CVE-2026-48928

Indicators of Compromise

  • Successful mTLS handshakes where the presented client certificate's SAN or CN does not match the hostname policy documented for the target tls.SecureContext.
  • TLS session logs showing SNI values that resolve to a different security context than the certificate's issued scope.
  • Application audit logs indicating cross-tenant resource access from a client certificate scoped to a single tenant.

Detection Strategies

  • Enable verbose TLS logging in Node.js using NODE_DEBUG=tls and correlate SNI, certificate subject, and the context selected for each handshake.
  • Compare req.socket.getPeerCertificate() output against the expected authorization scope inside request handlers and log divergences.
  • Deploy network detection rules that flag mTLS sessions where SNI and certificate identity fields diverge from documented tenant mappings.

Monitoring Recommendations

  • Centralize TLS handshake and application authorization logs and alert on peer certificates authenticated against unexpected contexts.
  • Track Node.js runtime versions across the fleet and alert on any host still running 22.22.3, 24.16.0, or 26.3.0 or earlier.
  • Monitor for anomalous client identifiers accessing tenant-scoped API endpoints outside their normal pattern.

How to Mitigate CVE-2026-48928

Immediate Actions Required

  • Upgrade Node.js to the fixed releases published in the June 2026 security release for the 22.x, 24.x, and 26.x lines.
  • Inventory all services that instantiate multiple tls.SecureContext objects or use SNICallback for tenant separation and prioritize them for patching.
  • Rotate any client certificates that could have been used to reach unintended contexts if abuse is suspected.

Patch Information

The Node.js project addressed CVE-2026-48928 in the June 2026 security releases across the 22, 24, and 26 lines. Patch details and downloadable binaries are available in the Node.js Security Blog Post.

Workarounds

  • Enforce authorization checks inside application handlers by comparing getPeerCertificate() fields against an allowlist tied to the expected tenant, rather than relying solely on TLS-layer policy.
  • Consolidate to a single tls.SecureContext where feasible, or split multi-tenant workloads onto separate processes and ports so each listener has one trust policy.
  • Restrict access to affected services with network-layer controls until the patched Node.js runtime is deployed.
bash
# Verify the installed Node.js version and upgrade if vulnerable
node --version
# Example upgrade using nvm to a fixed release line
nvm install --lts
nvm alias default 'lts/*'

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.