CVE-2026-42959NLnet Labs Unbound 版本 1.25.0 及之前版本中存在一个拒绝服务漏洞。该漏洞位于 DNSSEC 验证器组件中,当处理恶意上游响应时会导致程序崩溃。根本原因在于构造 chase-reply 消息时,代码使用了错误的计数器来计算 ADDITIONAL 部分资源集的写入偏移量。攻击者可以通过控制恶意 DNSSEC 签名域,配置特定的 DNAME 链和未签名的 CNAME,结合包含未签名 AUTHORITY 记录和签名 ADDITIONAL 粘合记录的响应来触发该漏洞。成功的利用会导致 Unbound 进程因解引用未初始化指针而立即崩溃,从而造成服务中断。该问题已在 Unbound 1.25.1 版本中修复。
该漏洞源于 Unbound 在 DNSSEC 验证过程中构建 chase-reply 消息时的逻辑错误。具体而言,代码在计算 ADDITIONAL 部分(rrsets)的写入偏移量时,使用了错误的计数器。攻击者可以通过精心构造的 DNS 数据包利用两个特定条件:一是 DNAME 重复会增加 ANSWER 部分的计数;二是权威过滤会减少 AUTHORITY 部分的计数。这两个条件的结合会在内存中创建一个未初始化的数组槽位。随后,验证器在处理过程中会解引用这个未初始化的指针,导致进程立即崩溃。攻击利用场景要求攻击者控制一个经过 DNSSEC 签名的域名。攻击者需要配置一个包含未签名 CNAME 的 DNAME 链,并发送包含未签名 AUTHORITY 记录以及签名 ADDITIONAL 粘合记录的响应。当 Unbound 处理这种特制的查询响应时,无需用户交互或认证即可触发崩溃。这种漏洞属于逻辑错误导致的内存破坏,主要影响服务的可用性,并未直接导致信息泄露或权限提升。修复方案在于使用正确的计数器来计算写入偏移量。