Knot Resolver DNS-over-QUIC远程代码执行漏洞公开利用代码已发布
sec随谈
sec随谈
sec随谈
2026年7月24日 11:24
北京
在小说阅读器读本章
去阅读
摘要
一名研究人员公开了Knot Resolver远程代码执行(RCE)漏洞的完整技术细节和可用的概念验证(PoC)利用代码。该漏洞是一个堆越界写入问题,位于DNS-over-QUIC监听模块中,无需身份验证即可触发。CZ.NIC在此次披露的前一天已通过6.4.1版本发布了修复补丁。
为何重要
Knot Resolver是CZ.NIC开发的开源缓存递归解析器,许多大型ISP将其部署在庞大的订阅用户群体前端。攻击者若能在解析器上实现代码执行,便可以为每一个下游客户端伪造DNS应答结果。
kresd这一守护进程会直接接收来自网络的不可信输入,这意味着任何能够访问DoQ端口的攻击者都可以触发这一Knot Resolver RCE漏洞,无需任何凭据,仅一个QUIC连接就足够了。
攻击原理
该漏洞本质上是一个大小追踪错误,被归类为CWE-787。kresd会将接收到的DoQ STREAM帧重新组装进每个连接对应的输入缓冲区中。其接收回调函数在处理时,是将每个帧的长度累加到已追踪的总大小上,而不是将该大小重置为新的总量。
经过多个帧的累积后,被追踪的大小会逐渐超出实际分配的空间。此后到来的某个帧便会\"钻空子\"落在这个被夸大的数值之下,从而跳过了本应进行的内存重新分配。紧接着执行的拷贝操作便会越过对象本身的边界。由于内存分配器会将该对象锁定在其真实的大小类别(size class)中,溢出的数据便会落入相邻的slab槽位中。
通过精心构造的连接\"梳理\"(grooming)手法,攻击者可以让这个相邻位置恰好存放一个TLS库的清理(cleanup)对象。覆写该对象内部的一个函数指针后,攻击者便能够在连接终止(teardown)过程中控制指令指针的走向。即便某次尝试失败,也只会导致worker进程崩溃,而监督进程(supervisor)会将其重新拉起,因此攻击者可以反复重试。
利用现状
目前尚未发现在野利用案例,但确实存在一个公开的概念验证代码。已发布的PoC及技术分析文章展示了在关闭ASLR保护的实验室环境主机上完整的端到端远程代码执行过程。若启用了ASLR,同样的利用原语仍需要配合一次信息泄露才能奏效。
受影响版本
Knot Resolver 6.3.0版本受影响,已在Debian 12系统下的6.3.0-cznic.1构建版本上得到验证。2026年7月22日发布的6.4.1版本已包含修复补丁。截至本文撰写时,该漏洞尚未获得正式的CVE编号。
该研究人员于2026年6月8日向CZ.NIC报告了此漏洞,并一直保留披露细节,直至补丁正式发布后才公开。
应对建议
- 请立即升级至Knot Resolver 6.4.1版本
- 若暂时无法完成补丁升级,可先禁用DoQ监听功能
- 在防火墙层面将DoQ端口访问限制为仅信任的客户端
- 对kresd worker进程反复崩溃的情况进行告警监控,这类现象往往意味着存在利用尝试失败的迹象
需要说明的是,DoT和DoH部署方式不受此漏洞影响。尽管如此,任何将DoQ服务暴露在公网上的解析器都应将此问题视为紧急事项加以处理。
参考链接:
https://github.com/venglin/knot-doq
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论