
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 插件的用户更新到修补版本,以防止潜在的服务中断。
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。
