CoreDNS漏洞使攻击者锁定DNS缓存并拒绝服务更新

admin 2025-12-16 16:30:30 安全新闻 来源:ZONE.CI 全球网 0 阅读模式

CoreDNS 中发现了一个重大漏洞,攻击者可以通过固定 DNS 缓存条目来破坏服务,从而有效地创建拒绝更新服务。

该缺陷存在于 CoreDNSetcd插件中,源于一个严重的逻辑错误,其中 etcd 租约 ID 被误解为生存时间 (TTL) 值,导致DNS 记录的缓存期异常长。

漏洞的根源在于该plugin/etcd/etcd.go文件。该TTL()函数错误地将 64 位 etcd 租约 ID 转换为 32 位无符号整数,并将此结果用作 DNS 记录的 TTL。

租约 ID 是租约授予的任意标识符,与租约期限无关。当生成较大的租约 ID 时,其截断值可能表示极长的 TTL,有时甚至跨越数十年。

TTL 混乱导致缓存固定

接收此记录的下游 DNS 解析器和客户端将在指定的时间内将其缓存。

这会引发“缓存固定”攻击,攻击者可以创建一个恶意或过时的 DNS 条目,该条目会持续很长时间,从而阻止任何未来的更新传播到受影响的客户端。

具有 etcd 数据存储写权限的攻击者可能通过受损的服务帐户或配置错误的环境来利用此漏洞。

攻击者会创建或更新DNS 记录,并为其附加租约。租约的实际期限无关紧要,只有其 ID 才重要。

CoreDNS 随后会使用大量被错误解读的 TTL 来提供此记录。因此,客户端和解析器将缓存这些过时的信息。

即使恶意条目从 etcd 中被更正或删除,并且 CoreDNS 重新启动,客户端仍将继续解析错误的地址,直到其本地缓存过期。

这对可用性有很高的影响,因为关键服务更新、IP 地址轮换或故障转移程序将被固定缓存条目的客户端忽略。

完整性影响被认为较低,因为具有 etcd 写访问权限的攻击者已经可以将服务重定向到恶意端点;然而,该漏洞放大了这种攻击的持久性。

受影响的版本和缓解措施

此漏洞是在 CoreDNS 1.2.0 版本中引入的,并影响所有使用etcd插件进行服务发现的后续版本。

该漏洞由 GitHub 用户“@thevilledev”披露,他也贡献了一个修复程序。建议的缓解措施包括更新该TTL()函数,使其能够正确使用 etcd 的 Lease API 来确定租约的剩余时间,而不是滥用租约 ID。

此外,建议实施可配置的最小和最大TTL 限制,以防止提供极端值。

etcd强烈建议CoreDNS 插件的用户更新到修补版本,以防止潜在的服务中断。

评论:0   参与:  3