CVE-2020-56416 漏洞概述 当验证器构建RRSIG覆盖的PX/RR/MX/NSO/SOA RDATA的规范形式时,它会计算第二个嵌入域名名称的地址(如“dstart + dname_validatedstart, ...”)并将其直接传递给“query.dname_tolower()”,而没有检查第二个域名是否实际存在于RDATA中。 在wire-format解析器接受多标签RRs,其RDATA在第一个名称后结束的情况下,攻击者可以运行一个DNSSEC签名的权威服务器,并发送一个带有缺失第二个域名名称(例如SOA记录)的记录,导致“query.dname_tolower()”通过状态机中的“env->scratch_buffer”逐标签行走,如果“env->scratch_buffer”的大小已从默认值降低,则会导致堆缓冲区溢出。在发布构建中,结果在很大程度上依赖于缓冲区尾部及其相邻堆块的内容。 影响范围 Unbound 1.25.2及之前版本。 修复方案 下载补丁版本:Unbound 1.25.2已发布补丁,下载地址为:https://nlnetlabs.nl/downloads/unbound/unbound-1.25.2.tar.gz 手动应用补丁: - 对于Unbound 1.25.1,补丁位于:https://nlnetlabs.nl/downloads/unbound/patch_CVE-2020-56416.diff - 在Unbound源代码目录中应用补丁: - 然后运行 安装Unbound。 - 补丁已在Unbound 1.25.1上测试。 致谢 感谢Palo Alto Networks的Qifan Zhang发现并负责任地披露此漏洞。