uClibc 库的域名系统漏洞,导致数百万台物联网设备受影响
据报道,uClibc库的域名系统 (DNS) 组件中存在高危漏洞,该漏洞影响所有版本uClibc-ng库的域名系统(DNS),因此导致使用uClibc库的数百万台物联网设备也受到了影响。
漏洞详情
这个高危漏洞编号为CVE-2022-05-02,攻击者利用这个漏洞可以进行DNS中毒或DNS欺骗攻击,并将受害者重定向到恶意网站。Nozomi Networks认为,该漏洞是由库生成的DNS请求中包含的事务ID的可预测性引起,可能允许攻击者对目标设备执行DNS中毒攻击。安全专家没有透露关于漏洞的更多细节,因为该问题供应商暂时没有办法解决。
相关资料显示,uClibc库专门为OpenWRT设计的一个分支,OpenWRT 是用于各种关键基础设施部门的路由器的通用操作系统。目前,uClibc库被广泛应用于Linksys、Netgear和Axis等各大厂商,或嵌入式Gentoo等Linux发行版。
Nozomi的研究人员通过查看物联网设备在其测试环境中执行的DNS请求跟踪发现了这个问题。他们从Wireshark 的输出中确定执行DNS请求的模式,事务ID首先是递增的,然后重置为0x2值,然后再次递增。请求的事务ID是可预测的,这种情况可能允许攻击者在某些情况下发起DNS中毒攻击。
经过研究人员分析可执行文件发现,创建DNS请求的问题出现在C标准库uClibc 的0.9.33.2版本。
源代码审查显示,uClibc库通过调用位于源文件“/libc/inet/resolv.c”中的内部“__dns_lookup”函数来实现DNS请求。鉴于交易ID的可预测性,攻击者想要利用该漏洞,就需要制作包含正确源端口的DNS响应,并赢得来自DNS服务器的合法DNS响应的竞争。由于该函数不应用任何显式源端口随机化,如果操作系统配置为使用固定或可预测的源端口,则很可能以可靠的方式轻松利用该问题。
如果操作系统使用源端口的随机化,则利用该问题的唯一方法是通过发送多个DNS响应,暴力破解16位源端口值,同时赢得与合法响应的竞争。
截止该报告发布时,该漏洞仍没有修复。开发者似乎无法为该漏洞开发修复程序,从2022年1月以来,CERT/CC 向200多家受邀参与VINCE案例的供应商披露了该漏洞,并在公开发布前30天通知他们。Nozomi 总结道。