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