· adswds-team · 安全 · 5 min read
Node.js 把不规范 IP 当成了合法主机名:CVE-2026-106069
2026-10-21 Node 安全发行:CVE-2026-106069(high)在主机名被宽松解析成 IP 时绕过证书主机名校验,影响 26/24/22。同日还有全角数字写法 CVE-2026-105483,22.23.4 的说明未列入该号。

Node.js 2026-10-21 安全发行里,CVE-2026-106069 的标题是:当主机名被宽松地解析成 IP 地址时,TLS 证书主机名校验可被绕过。严重性 high,影响 26.x、24.x、22.x。修复版本是 26.12.1、24.22.1、22.23.4。发行说明里对应的变更是 Matteo Collina 的 tls: reject non-canonical IP addresses,同一条还标了中危 CVE-2026-106072。
一句话:证书校验看的名字,和你以为的那台主机,中间多了一层「像 IP 的字符串」。
公告没有写攻击已在野外出现,也没有给出可复现的主机名样例。下面只复述已发布的范围和同日相邻编号,避免把标题延伸成未公开的利用链。
一、同日三条主机名相关编号,不要抄错影响线
| CVE | 公告标题中的要点 | 严重性 | 影响线 |
|---|---|---|---|
| CVE-2026-106069 | 主机名被宽松解析为 IP 时,证书主机名校验绕过 | high | 26.x、24.x、22.x |
| CVE-2026-106072 | 非规范 IPv4 主机名校验不当,DNS SAN 可以拿来认证 IP 端点 | medium | 26.x、24.x、22.x |
| CVE-2026-105483 | IP 写成全角数字时的证书主机名绕过 | high | 仅 26.x 与 24.x |
22.23.4 的显著变更包含 106069 / 106072,没有 105483。24.22.1 与 26.12.1 有 James M Snell 的 tls: fix ip normalization regression,对应 105483。只跑 22 LTS 的机器,这次仍必须升到 22.23.4 才能修 106069;「22 没有 105483」不等于 22 可以不升。
三条的修复都在上述安全版本里,不需要分开找补丁包。已停止维护的 Node 主版本,公告认为在安全发行时同样受影响,且没有这次修复。
二、对出站 HTTPS 意味着什么
官方没有把影响写成「所有 HTTPS 客户端立刻被中间人」。能从标题和修复说明成立的判断是:Node 在做 TLS 对端身份校验时,对「能被看成 IP」的主机名不够严,非规范形式可能对上错误的证书身份(106072 的标题明确提到 DNS SAN 认证 IP 端点)。
因此优先看这些进程,而不是浏览器里打开的落地页:
- 用 Node
tls/https/ fetch 去连追踪、回传、对象存储和支付回调的服务; - 主机名来自配置拼接、用户输入或上游跳转,而不是写死的 DNS 名;
- 自签或私有 CA 的内部端点,若校验本来就关着,这次补丁不会替你把校验打开。
升级后要重启进程并重建镜像。根证书也在同一次发行里更新到 NSS 3.131.1,公告同时列出 eMudhra 中间 CA 相关的 ca-cert 更新,以及「拒绝包含被封锁公钥的证书链」。这是证书库更新,不是 106069 本身。
三、和投放链路的边界
落地页若只是静态文件或 PHP,访客浏览器的证书校验不走这个 CVE。会走到这里的是:Node 自己作为 TLS 客户端。构建机拉包、转化回传、服务端请求素材 CDN,都算。浏览器侧的 HTTPS 策略是另一件事,见 Chrome 154 的 HTTP 确认。
同日 Brotli 解码问题见 CVE-2026-111497。一次升到安全发行,比按 CVE 号分批重启更不容易漏 22 与 24 的差异。
四、小结
CVE-2026-106069 是高危的证书主机名绕过,22、24、26 都在影响列表里,修复版本 22.23.4 / 24.22.1 / 26.12.1。全角数字那条 CVE-2026-105483 同样是 high,但公告只列了 26.x 和 24.x。官方未公开细粒度触发条件;运维侧的动作是升级并重启出站 TLS 的 Node 进程。
来源:October 21, 2026 Security Releases、v22.23.4、v24.22.1、v26.12.1。



