CVE-2026-43156Linux内核中的pegasus USB网络驱动程序存在安全漏洞。该驱动程序在探测设备时,直接使用硬编码的端点管道来填充URB,而未验证USB设备的端点描述符是否与驱动程序预期的类型匹配。攻击者可以通过特制的恶意USB设备,利用该漏洞触发断言失败或导致内核崩溃,从而造成系统拒绝服务。该漏洞需要本地物理访问权限(插入USB设备)且具有低权限用户即可触发。
该漏洞位于Linux内核的`net/usb/pegasus.c`驱动文件中。在`pegasus_probe()`函数初始化设备时,代码直接使用了硬编码的端点地址(1、2、3)来创建接收数据、发送数据和状态中断的URB(USB Request Block)。具体来说,它调用`usb_rcvbulkpipe(dev, 1)`、`usb_sndbulkpipe(dev, 2)`和`usb_rcvintpipe(dev, 3)`,假设端点1是Bulk In,端点2是Bulk Out,端点3是Interrupt In。然而,驱动程序并未调用`usb_find_common_endpoints()`或类似的检查函数来验证设备描述符中的实际端点类型。如果攻击者接入一个恶意的USB设备,其描述符虽然声明存在这些端点地址,但其传输类型(如Control、Isochronous等)与驱动程序假设的Bulk或Interrupt不符,内核在后续处理这些URB时会产生逻辑错误,触发断言(assertion)或内存访问异常。这会导致内核崩溃,破坏系统可用性。修复方案引入了`pegasus_usb_ep`枚举,并在资源分配前增加了`usb_check_bulk_endpoints()`和`usb_check_int_endpoints()`验证步骤。