事件概述
NLnet Labs 于 9 月 16 日发布 Unbound 1.26.1 安全版本,修复一批 DNS 解析器漏洞,其中危害最高的是 CVE-2026-81642,CVSS 4.0 评分 9.1,级别为严重。该漏洞位于 Unbound 的 DNSSEC 验证器中,影响 1.26.1 之前的全部版本,包括 7 月的安全版 1.25.2 与 8 月的功能版 1.26.0。截至公告发布,NLnet Labs 与 CISA 均未记录到在野利用。
技术细节
漏洞本质是 CWE-122 堆缓冲区溢出。当一个 DNSKEY 记录的 owner name 使用了指向其自身 RDATA 的压缩指针时,验证器在校验过程中会把数据写入摘要缓冲区并造成溢出。远程代码执行的可能性来自攻击者可控的数据内容。触发条件是攻击者控制一个恶意区域,并让存在漏洞的 Unbound 去查询它,整个过程不需要认证,也不需要用户交互,只需要网络可达。
同批修复的其他漏洞
1.26.1 一次性修复了 9 个 CVE,除主漏洞外还有若干值得关注。
- CVE-2026-82717(高):CNAME 合成会改写报文缓冲区中的最大 TTL,配合错误的压缩指针可逐步破坏堆内存,在部分系统与编译选项下可升级为代码执行,由 Anthropic 的研究员报告
- CVE-2026-81634(高):255 长度的查询名与较大的 TCP 响应组合,可在 RRSet 规范化阶段造成堆溢出
- CVE-2026-85501(中):ReTrap 类算法复杂度攻击,通过 TagTrap、DelegationTrap、NsecTrap、AdditionalTrap 拖垮 DNSSEC 校验
- CVE-2026-82720(中):构建了 DoH 支持(
--with-libnghttp2)时,DoH 流清理路径存在释放后使用 - CVE-2026-78227(中):DoQ 在收到 RESET_STREAM 时释放了流输出缓冲区,而 ngtcp2 仍持有重传指针
- CVE-2026-77955(中):ZONEMD 区域在验证完成前可能短暂提供被篡改的内容
- CVE-2026-77860(低):serve-expired 会重复递减每客户端 wait-limit,削弱 DNSBomb 的缓解效果
影响评估与修复建议
- 受影响范围:Unbound 全部低于 1.26.1 的版本,1.25.2 与 1.26.0 均在内
- 启用 DNSSEC 校验的递归解析器风险最高,这也是多数发行版的默认配置
- 对公网提供递归解析服务的实例应视为最高优先级,DNS 解析器失陷会直接影响所有下游业务
升级是唯一完整的修复方式,但由于发行版仓库通常滞后,建议在补丁到位前先确认版本与暴露面。
# 查看当前版本与发行版包状态
unbound -V
apt-cache policy unbound # Debian / Ubuntu
rpm -q unbound # RHEL / Fedora
如果无法立即升级,NLnet Labs 为 CVE-2026-81642 与 CVE-2026-82717 提供了可应用于 1.26.0 的独立源码补丁,使用 patch -p1 即可应用。同时应限制递归解析服务的来源网段,关闭对公网的开放式递归,并在边界设备上阻断异常的 DNSKEY 与超大 DNSSEC 响应。检测层面建议关注解析器进程中异常的内存增长、非计划重启,以及来自单一区域的重复 DNSSEC 查询。