CVE-2021-45608:NetUSB RCE漏洞影响数百万路由器
2022-1-19 11:45:0 Author: www.4hou.com(查看原文) 阅读量:23 收藏

NetUSB是KCodes开发的产品,允许网络中的设备与连接在路由器上的USB设备进行交互。比如,可以与打印机进行交互。这一过程要求计算机中的驱动能够通过kernel模块与路由器通信。研究人员在NetUSB中发现一个远程代码执行漏洞,漏洞CVE编号为CVE-2021-45608。

NetUSB授权给了大量的厂商使用,包括:

Netgear

TP-Link

Tenda

EDiMAX

DLink

Western Digital

因此该漏洞影响全球数百万的设备,而且该漏洞的利用可以远程实现。

NetUSB.ko Internals

用于初始化连接的握手如下所示:

微信图片_20220119100735.jpg

握手后,会执行用于命令分析的while循环,代码如下:

微信图片_202201191007351.jpg

SoftwareBus_fillBuf 与recv的处理方式类似,都用到buffer和buffer大小,会用从socket读取的数据来填充buffer。

漏洞分析

命令0x805f在函数 SoftwareBus_dispatchNormalEPMsgOut中会达到以下代码:

微信图片_202201191007352.jpg

Kernel模块中有漏洞的代码部分

代码会从远程PC处取回4字节的内容。然后加上0x11,并用作kmalloc中的size值。因为提供的size值并没有经过验证,因此加上0x11后可能会引发整数溢出。比如,0xffffffff的大小在加上0x11会变成0x10。

然后分配的区域可以通过去引用和SoftwareBus_fillBuf函数来使用和写入:

微信图片_202201191007353.jpg

越界写

从最后一次对SoftwareBus_fillBuf的调用来看,填充的大小可以用作从远程socket读取的最大值。从之前的例子来看,大小0xffffffff可以用作发送给recv的大小。

漏洞补丁

建议的修复方案

在用用户提供的size值来分配内存之前,研究人员建议进行一个整数溢出检查:

if(user_supplied_size + 0x11 < 0x11) return;

因为该漏洞存在于不同种类路由器的第三方组件中,修复该漏洞的唯一方式就是更新路由器固件。

Netgear给出的更新固件中,就是加入了一个新的size检查:

微信图片_202201191007354.jpg

Netgear给出的补丁

本文翻译自:https://www.sentinelone.com/labs/cve-2021-45608-netusb-rce-flaw-in-millions-of-end-user-routers/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/Qg85
如有侵权请联系:admin#unsafe.sh