KCodes NetUSB严重漏洞影响数百万来自不同供应商的路由器

在KCodes NetUSB内核模块中发现了一个被跟踪为 CVE-2021-45388 的高严重性远程代码执行漏洞,数百万流行的最终用户路由器面临远程代码执行 (RCE) 的风险。使用易受攻击NetUSB模块的路由器供应商涉及Netgear、TP-Link、Tenda、EDiMAX、Dlink和Western Digital。

什么是NetUSB

KCodes NetUSB是一个Linux内核模块,它使本地网络上的设备能够通过IP提供基于USB的服务。打印机、外部硬盘驱动器和闪存驱动器插入到基于linux的嵌入式系统(例如路由器),可以通过网络使用该驱动程序。

图片3.png

根据Sentinel One分享的报告显示,攻击者可以通过预认证缓冲区溢出安全漏洞远程利用该漏洞在内核中执行代码,从而允许接管设备。

通信握手

USB连接过程开始于PC和路由器之间的握手,以初始化通信:如下图所示。

图片4.png

握手之后是一个while-loop命令解析,它包含以下代码:

图片5.png

“SoftwareBus_fillBuf的作用与recv类似,它同时获取缓冲区及其大小,用从套接字读取的数据填充缓冲区。”安全研究人员表示。

BUG

当0x805f命令到达SoftwareBus_dispatchNormalEPMsgOut函数中的以下代码时,会触发内核模块中的脆弱代码块:

图片6.png

“从远程PC中获取了四个字节,”研究人员继续说。数字0x11被加到它上面,然后在kmalloc中用作大小值。由于这个提供的大小没有经过验证,所以添加0x11可能会导致整数溢出。例如,0xffffffff的大小将导致在添加了0x11之后产生0x10。”

然后通过解引用和SoftwareBus_fillBuf函数使用和写入这个已分配的区域,他继续说。如下所示。

图片7.png

研究人员称”查看对SoftwareBus_fillBuf的最后一次调用,所提供的大小被用作从远程套接字读取的最大值。”"从前面的例子,大小0xffffffff将在这里使用(不是溢出的值)作为发送给recv的大小。”

在报告的同时,SentinelOne发送了一份建议的缓解策略,如下所示。该公司指出,在使用用户提供的内存大小分配内存之前,应该执行这个整数溢出检查:

微信图片_20220113103954.png

可利用性

根据分析,有许多因素会影响利用此漏洞的可行性:

可分配大小:最小可分配的大小是0x0,最大可分配的大小是0x10。研究人员指出:“这意味着所分配的对象将始终位于内核堆的kmalloc-32 slab中。

对溢出本身的控制量:攻击者控制通过套接字接收的数据,但大小可以协商吗?“由于 0xffffffff的大小在32位系统上实际上是不可利用的,因此有必要看看 SoftwareBus_fillBuf 的实际工作原理,”研究人员解释称。“这个函数下面是标准的socket recv函数。这意味着提供的大小仅用作最大接收大小,而不是严格的数量,例如 memcpy。”

易于为溢出布局内核堆: “许多漏洞利用需要使用堆孔,以确保将易受攻击的堆结构放置在将被覆盖的对象之前,”Van Amerongen补充道。“在这个内核模块的情况下,接收数据的套接字有16秒的超时,这意味着结构在分配后最多可以溢出16秒。这样就不需要创建一个堆孔了。”

关于可以覆盖哪些目标结构的约束:

该结构的大小必须小于32字节才能适合kmalloc-32

该结构是可喷涂的

结构必须有一些可以被覆盖的东西,使其成为有用的目标(例如类型-长度-值结构或指针)

大到不容忽视

底线:为这个安全漏洞编写一个利用程序并不是一件容易事,但SentinelOne认为这也不是不可能的,而且它太关键了不容忽视。

“此漏洞影响全球数百万台设备,在某些情况下可能完全可以远程访问,”安全研究人员强调说。

鉴于该漏洞存在于授权给各个路由器供应商的第三方组件中,这意味着唯一的修复方法是每个特定供应商推出的固件更新。

SentinelLabs于2021年9月9日开始披露程序,并于10月4日将补丁发送给所有供应商。

12月14日,Netgear发布了其R6700v3设备(版本 1.0.4.122)的固定固件。

12月20日,Netgear发布了关于该漏洞的警告,并为D7800型号(固件版本1.0.1.68)和R6400v2路由器(固件版本1.0.4.122)提供了补丁。

调查显示,旧的安全漏洞在黑客论坛中关注度依旧很高,这就意味着那些没有按时更新软件漏洞补丁的企业被黑客攻击的潜在风险很大。尤其黑客不断扫描网络中存在的漏洞准备随时发起攻击,软件存在安全漏洞就意味着给黑客以可乘之机。

建议企业除了安装防护软件之外,及时检测、发现网络系统中的薄弱环节,并进行维护和修补,减小被黑客盯上的概率。同时,对于软件开发企业,不应只关注在软件开发的功能和效率,同时要将安全问题融入至开发周期当中,尤其经常被忽略的代码缺陷等问题。在静态代码安全检测中,不但可以查找、定位代码的缺陷问题,同时还能检测出一些不需要运行即可发现的问题,如XXS,注入漏洞、缓冲区溢出等。

综合参考:

thehackernews.com/2022/01/new…

www.bleepingcomputer.com/news/securi…

threatpost.com/millions-ro…