缓存投毒漏洞在2款DNS解析应用中被发现
互联网上使用最广泛的域名解析软件BIND的开发人员发出警告,称存在两个漏洞允许攻击者污染整个解析结果缓存,将用户引导至与真实目标无法区分的恶意目的地。
这两个被标记为CVE-2025-40778和CVE-2025-40780的漏洞,分别源于逻辑错误和伪随机数生成弱点,严重性评分均为8.6。同时,域名系统解析软件Unbound的开发者也警告了由同一研究人员报告的类似漏洞,Unbound漏洞的严重性评分为5.6。
重温Kaminsky缓存投毒攻击
这些漏洞可被利用,使位于数千个组织内部的DNS解析器用损坏的结果替换有效的域名查询结果。损坏的结果会将由域名运营商控制的IP地址(例如arstechnica.com的3.15.119.63)替换为攻击者控制的恶意地址。所有这三个漏洞的补丁已于周三发布。
2008年,研究员Dan Kaminsky披露了互联网历史上最严重的全网络安全威胁之一。这种被称为DNS缓存投毒的技术使攻击者能够将大量用户引导至冒充站点,而非Google、美国银行或其他任何机构的真实站点。通过行业范围的协调,全球数千家DNS提供商与浏览器及其他客户端应用程序制造商合作实施了一个修复程序,避免了这种末日场景。
该漏洞源于DNS使用UDP数据包。由于UDP数据包仅单向发送,DNS解析器在与“权威服务器”(即那些被正式指定为特定顶级域提供IP查询的服务器)通信时无法使用密码或其他形式的凭据。此外,UDP流量通常很容易伪造,这意味着发送看似来自其他来源的UDP数据包很容易。
为确保解析器仅接受来自权威服务器的结果并阻止任何可能由未经授权服务器发送的投毒结果,解析器为每个请求附加一个16位数字。除非服务器返回的结果包含相同的ID,否则将被拒绝。
Kaminsky意识到只有65,536个可能的事务ID。攻击者可以通过向DNS解析器发送针对特定域的大量查询结果来利用此限制。每个结果会使用域名的一个微小变体,例如1.arstechnica.com、2.arstechnica.com、3.arstechnica.com等。每个结果还会包含不同的事务ID。最终,攻击者会复制出一个未完成请求的正确号码,恶意IP地址将被提供给所有依赖发出该请求的解析器的用户。这种攻击被称为DNS缓存投毒,因为它污染了解析器的查询存储。
DNS生态系统最终通过指数级增加接受响应所需的熵来解决了这个问题。此前,查询和响应仅通过53端口传输,而新系统随机选择数千个潜在端口中的任何一个。DNS解析器要接受响应,必须通过相同的端口号传输。结合事务编号,熵以数十亿计,使得攻击者在数学上不可能找到正确的组合。
至少其中一个BIND漏洞CVE-2025-40780实际上削弱了这些防御。
“在特定情况下,由于所使用的伪随机数生成器存在弱点,攻击者有可能预测BIND将使用的源端口和查询ID,”BIND开发人员在周三的披露中写道。“如果欺骗成功,BIND可能被诱骗缓存攻击者的响应。”
CVE-2025-40778也增加了复活缓存投毒攻击的可能性。
“在某些情况下,BIND在接受来自应答的记录时过于宽松,允许攻击者将伪造数据注入缓存,”开发人员解释道。“伪造记录可以在查询期间被注入缓存,这可能影响未来查询的解析。”
即使在这种情况下,由此产生的影响也将比Kaminsky设想的情况有限得多。原因之一是权威服务器本身并不易受攻击。此外,正如红帽公司在此处和此处指出的,各种其他缓存投毒对策仍然有效。它们包括DNSSEC,这是一种要求DNS记录进行数字签名的保护措施。其他措施包括速率限制和服务器防火墙,这些被视为最佳实践。
“由于利用并非易事,需要网络级欺骗和精确计时,并且仅影响缓存完整性而不会导致服务器泄露,该漏洞被认为是‘重要’而非‘严重’,”红帽公司在关于CVE-2025-40780的披露中写道。
尽管如此,这些漏洞仍有可能对一些组织造成损害。所有三个漏洞的补丁应尽快安装。