最近关注到 BIND 9 中的一个较严重漏洞,编号为 CVE-2025-40777。
通过查阅文档,这个漏洞主要在递归服务器中出现,在特定配置下,遇到某些 CNAME 解析请求时,named 进程因断言失败崩溃,造成 DNS 服务不可用。
漏洞背景
漏洞出现在 BIND 的 serve-stale 功能上。serve-stale 作用是当上游服务器响应失败时,
允许使用过期缓存应答,从而保证解析的连续性和稳定性。
然而当配置文件中设置了 stale-answer-client-timeout
为 0,同时启用了 serve-stale,
遇到某些特殊的 CNAME 链解析请求时,named 进程会触发断言失败崩溃。
影响范围
- BIND 9.20.0 到 9.20.10
- BIND 9.21.0 到 9.21.9
- BIND 9.20.9-S1 到 BIND 9.20.10-S1
- 9.18.0之前和9.18.11-S1之前的版本官方没有测试
默认情况下,serve-stale 是关闭的,且 stale-answer-client-timeout
也不是 0,
因此如果没有手动设置,一般不会受到影响。
如果没有开启递归,纯权威服务器不会受此漏洞的影响。
漏洞等级与风险
- CVSS v3.1 基础分数:7.5(高危)
- 攻击者无需认证即可远程触发 DoS 攻击
- 攻击结果为 DNS 服务进程崩溃,导致解析中断
- 影响依赖该服务的系统和应用,可能造成网站访问失败、邮件中断、微服务不可用
漏洞原理简述
在处理递归查询时,serve-stale 允许返回过期的缓存答案以提高容错性。
但当 stale-answer-client-timeout
设置为 0,表示客户端不等待任何上游响应,
这与内部对 CNAME 链的处理逻辑发生冲突,最终导致断言失败。
临时解决办法
如果暂时无法升级,建议修改配置关闭此功能,避免崩溃:
options {
stale-answer-client-timeout off;
// 或者直接关闭 serve-stale
stale-answer-enable no;
};
改完后请重启 named 服务生效。
推荐修复方案
官方已经发布了 BIND 9.20.11 BIND 9.21.10 BIND 9.20.11-S1 修复了此漏洞,升级后该漏洞断言失败问题将被彻底解决。
如果自行编译源码,官方源码包地址:
https://downloads.isc.org/isc/bind9/9.20.11/bind-9.20.11.tar.xz
升级完成后用 named -v
命令确认版本信息。
漏洞来源
该漏洞最初由 ISC 官方披露,相关安全咨询也已提交至 GitHub Advisory 数据库,
详情见:https://github.com/advisories/GHSA-4x4c-8qp9-8ggh