CVE-2026-48618: Node.js TLS Wildcard Validation Bypass via Unicode Normalization
Node.js versions 22, 24, and 26 contain a TLS hostname validation flaw that exploits a mismatch in how Unicode dot separators are handled during certificate verification. An attacker with valid credentials can craft a certificate with a specially-formatted hostname that passes wildcard validation checks on the resolver side but fails on the verifier side, potentially allowing them to intercept encrypted traffic or bypass intended security boundaries. The vulnerability requires authenticated access to exploit, but the impact on confidentiality is significant.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.5 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
- Weaknesses (CWE)
- CWE-176, CWE-289
- Affected products
- 3 configuration(s)
- Published / Modified
- 2026-06-26 / 2026-07-21
NVD description (verbatim)
A flaw in Node.js TLS hostname handling can cause Node.js unicode dot separator handling can lead to tls wildcard-depth authentication bypass due to resolver and verifier hostname normalization mismat. This can lead to confidentiality impact or bypass of the intended security boundary under affected configurations. This vulnerability affects all supported release lines: **Node.js 22**, **Node.js 24**, and **Node.js 26**.
16 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability stems from inconsistent normalization of hostname strings during TLS certificate validation in Node.js. Specifically, the resolver and verifier components handle Unicode dot separators (such as U+3002, the ideographic full stop) differently when validating wildcard certificates. An attacker can present a certificate with a hostname containing these alternate Unicode characters that satisfy the initial resolver normalization but diverge during downstream verifier normalization, bypassing depth-based wildcard matching policies. This affects the TLS/SSL handshake mechanism across Node.js 22, 24, and 26 supported release lines. The root cause relates to CWE-176 (Improper Handling of Unicode Encoding) and CWE-289 (Authentication Bypass by Spoofing), indicating hostname normalization and authentication enforcement weaknesses.
Business impact
A successful exploitation could allow an authenticated attacker to decrypt previously encrypted communications or assume the identity of a trusted service within your application's TLS-protected connections. Organizations relying on Node.js applications for API gateways, microservices, or internal service meshes face elevated risk if those connections assume strict wildcard hostname validation. The medium CVSS score reflects the requirement for prior authentication, but the confidentiality impact (high) means sensitive data exposure is possible if an attacker obtains legitimate credentials. Organizations must assume any Node.js-based TLS endpoint is at risk until patched.
Affected systems
All supported release lines are vulnerable: Node.js 22.x, Node.js 24.x, and Node.js 26.x. Any application or service running on these versions that initiates or validates TLS connections—including HTTPS servers, client libraries, and microservice communication—is potentially affected. Legacy or unsupported versions (18.x, 20.x, and earlier) are outside the stated scope, but you should verify your exact Node.js inventory to ensure no surprise deployments exist in production or development environments.
Exploitability
Exploitation requires the attacker to possess valid credentials (authentication is mandatory per the CVSS vector PR:L). The attack does not require user interaction and is network-accessible. The attacker must be in a position to present a malicious certificate during the TLS handshake—typically via man-in-the-middle positioning or through a compromised certificate authority. Given the moderate AC:L (low attack complexity), once credentials are obtained, the technique is straightforward to execute. The vulnerability is not currently tracked in CISA's Known Exploited Vulnerabilities (KEV) catalog, suggesting limited public weaponization to date, but security teams should not interpret this as low real-world risk.
Remediation
Apply the latest security patches released by the Node.js project for versions 22, 24, and 26. The Node.js security advisory will specify the exact patched version numbers for each release line—verify the specific version available for your supported release branch. If you cannot immediately patch, review your TLS endpoint configurations to identify and isolate services that accept certificates with Unicode characters in hostnames and consider restricting such certificates at your infrastructure layer pending patch deployment. Audit recent connection logs for any unusual certificate validation anomalies.
Patch guidance
Check the official Node.js security advisories and release notes for patched versions in the 22.x, 24.x, and 26.x series. Patches should be tested in a staging environment before production rollout to ensure no regression in certificate validation or application behavior. The fix will likely normalize Unicode dot separators consistently across both resolver and verifier code paths. After patching, restart all Node.js applications to activate the corrected TLS validation logic. Monitor application logs and TLS handshake metrics during and after deployment for any unexpected failures.
Detection guidance
Monitor TLS handshakes and certificate validation events in your Node.js application logs and network traffic. Look for successful certificate validations followed by connection anomalies, or for certificates presenting hostnames with Unicode dot separators (U+3002, U+FF0E, U+FF61, etc.) in the Common Name or Subject Alternative Name fields. Inspect packet captures for non-ASCII characters in TLS ClientHello and ServerHello messages. If you maintain a certificate transparency log or perform TLS certificate pinning, cross-check for unexpected issuances to your domain names with these Unicode variants. Network IDS/IPS signatures targeting Unicode normalization attacks may also flag malicious handshakes.
Why prioritize this
This vulnerability merits immediate attention despite its medium CVSS score. The authentication requirement limits blast radius, but the high confidentiality impact means any compromised credential holder can potentially decrypt sensitive traffic. Node.js is ubiquitous in modern application architectures, and wildcard certificate validation is a critical security boundary. The fact that all three supported release lines (22, 24, 26) are affected suggests broad ecosystem exposure. Prioritize patching production Node.js instances handling sensitive data or inter-service communication, followed by development and testing environments.
Risk score, explained
The CVSS 3.1 score of 6.5 (MEDIUM) reflects a network-accessible vulnerability (AV:N) with low attack complexity (AC:L), but mitigated by the requirement for low-privileged authentication (PR:L). No user interaction is needed (UI:N), and the scope is unchanged (S:U). The confidentiality impact is rated high (C:H), indicating potential disclosure of sensitive information, while integrity and availability are unaffected. Organizations with strong credential hygiene and network segmentation may experience lower practical risk, but the high confidentiality rating warrants treating this as elevated priority within your patch cycle.
Frequently asked questions
Can this vulnerability be exploited without valid credentials?
No. The CVSS vector includes PR:L, indicating the attacker must possess low-privilege credentials to mount an effective attack. However, in environments where service accounts or API keys are widely distributed, the credential barrier is lower than it may appear.
Does patching require a full Node.js reinstall or just an update?
Typically, you can upgrade your Node.js binary to the patched version without reinstalling applications. Verify the Node.js release notes for your specific version to confirm backward compatibility, then restart your Node.js processes to load the updated runtime.
What is a Unicode dot separator and why is it a problem here?
Unicode includes several characters that visually resemble a period or dot but are encoded differently (e.g., U+3002 is the ideographic full stop used in CJK text). The bug occurs because the TLS validation code normalizes these differently in different code paths, allowing a hostname like 'example․com' (with a Unicode dot) to pass one check but fail another, bypassing wildcard depth restrictions.
Are Node.js versions 18 or 20 affected?
The vendor advisory specifies only versions 22, 24, and 26 as affected. If you run Node.js 18 or 20, this vulnerability does not apply, though you should continue monitoring for other security issues and consider a timeline to upgrade to a supported release line.
This analysis is provided for informational purposes and reflects the vulnerability details as published. Organizations must verify all patch versions, affected system inventories, and remediation steps against official Node.js security advisories before taking action. SEC.co makes no warranty regarding the completeness or accuracy of this content relative to your specific environment. Test all patches in non-production environments before deployment. If you discover active exploitation of this vulnerability, contact your security incident response team and consider reporting to Node.js security contacts. Source: NVD (public-domain), retrieved 2026-08-04. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-59890MEDIUMsetuptools Unicode Normalization Bypass on macOS
- CVE-2026-44492HIGHAxios NO_PROXY IPv4-Mapped IPv6 Bypass Vulnerability (CVSS 8.6)
- CVE-2026-45062HIGHFrankenPHP Remote Code Execution via Non-ASCII Path Handling
- CVE-2026-45135HIGHCaddy FastCGI Path Splitting Remote Code Execution
- CVE-2026-49401HIGHDeno macOS Permission Bypass via Unicode Path Equivalence
- CVE-2026-55075HIGHCoder OIDC Account Takeover – Email Verification Bypass
- CVE-2026-48928MEDIUMNode.js mTLS Hostname Matching Vulnerability – Trust Policy Bypass
- CVE-2026-48934MEDIUMNode.js TLS Certificate Validation Bypass