CVE-2026-48930 (CVSS 9.8) - A flaw in Node.js TLS hostname handling can cause Embedded-nul hostnames can lea
CVE-2026-48930是Node.js TLS主机名处理中因空字节截断导致的严重漏洞(CVSS 9.8)。影响Node.js 22、24、26版本,允许攻击者绕过主机名验证实施中间人攻击。本文深入分析漏洞原理、攻击场景及修复方案。
CVE-2026-48930 (CVSS 9.8) - A flaw in Node.js TLS hostname handling can cause Embedded-nul hostnames can lea
📋 漏洞概述
Node.js的TLS主机名验证中存在空字节截断漏洞,可被用于静默的权威重绑定攻击,导致绕过安全限制。
📋 基础信息
| 受影响版本 | Node.js 22.x, Node.js 24.x, Node.js 26.x |
| 漏洞类型 | 空字节注入 / 输入验证不当 |
| CVSS | 9.8 · Critical |
| CVE | CVE-2026-48930 |
🔬 漏洞根因
Node.js在TLS主机名校验时,将包含嵌入空字节('\0')的主机名传递给底层C库解析器绑定。C语言的字符串处理函数遇空字节即截断,导致后续只有空字节之前的部分被用于DNS查询或证书验证,而完整的恶意主机名(如'attacker.com\0.trusted.com')在TLS握手后被解析为'trusted.com'的证书,但实际上连接目标是'attacker.com',从而绕过主机名验证实现权威重绑定。
🎯 攻击场景
1. 攻击者注册一个包含空字节的域名(如 'evil\0.example.com')并配置其证书。 2. 攻击者诱导Node.js客户端连接该域名,或通过中间人篡改DNS响应指向攻击者控制的IP。 3. 客户端TLS握手时,Node.js将包含空字节的主机名传递给验证函数。 4. 底层C函数截断主机名,仅使用空字节前的部分('evil')进行证书匹配,而合法的证书往往匹配截断后的短名称(或可被攻击者自行签发匹配'evil'的证书)。 5. 连接建立成功,攻击者实现HTTPS劫持或中间人攻击,窃取或篡改加密通信数据。
💥 漏洞影响
攻击者可绕过Node.js TLS主机名验证,实现对加密连接的中间人攻击(MITM),窃取、篡改敏感数据或降级通信安全。影响所有使用Node.js进行TLS通信的服务端与客户端应用,包括Web服务器、API服务、数据库驱动等。CVSS 9.8表明可远程无认证利用且机密性、完整性和可用性均受严重影响。
🛡️ 修复建议
1. 升级Node.js至修复版本(官方尚未发布最终修复版本时,建议关注Node.js安全公告并应用补丁)。 2. 临时缓解措施:在应用层对用户提供的主机名进行严格过滤,剔除或转义空字节('\0'),并仅允许通过白名单验证的受信任域名发起TLS连接。 3. 使用额外的证书固定(Certificate Pinning)机制减少中间人攻击面。
📎 参考链接
- https://nvd.nist.gov/vuln/detail/CVE-2026-48930
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-48930
- 原始来源(NVD-Latest)
🚨 威胁评估
| 📈 EPSS 利用概率 | 低 (0.4%) (高于 29.9% 的漏洞) |
| 🚨 CISA KEV | 未被已知利用 |
| 🔧 公开 PoC | 暂无公开 PoC |
⚠️ 本文由漏洞情报系统自动生成,仅供安全研究与防御参考。生成时间: 2026-06-28 08:08 | 来源: NVD-Latest
🤖 常见问题解答(FAQ)
❓ 如何检测Node.js应用中是否存在此漏洞?
检查Node.js版本是否在22.x、24.x、26.x范围内;使用包含空字节的主机名(如'test\0.example.com')进行TLS连接测试,观察是否成功建立TLS握手。
❓ 此漏洞对Node.js服务器端影响大吗?
影响极大。攻击者可通过DNS劫持或恶意域名诱导,使服务器TLS客户端误连恶意站点并泄露服务端敏感数据或凭证。
❓ 空字节注入为什么能绕过TLS校验?
因为Node.js将含空字节的主机名传入C层字符串函数时,空字节被解释为字符串结束符,导致后续主机名部分被忽略,但TLS握手使用的原始域名仍包含完整恶意部分,造成验证与实际连接不匹配。