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

CVE-2026-31756 Linux内核DWC2驱动死锁漏洞

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务死锁USB驱动逻辑错误本地漏洞

漏洞概述

Linux内核USB DWC2 Gadget驱动存在安全漏洞。`dwc2_hsotg_udc_stop`函数在调用`dwc2_gadget_exit_clock_gating`时未持有必要的自旋锁`hsotg->lock`。这导致锁状态不匹配,引发内核未定义行为及死锁,允许本地低权限攻击者使系统崩溃。

技术细节

漏洞源于Linux内核`drivers/usb/dwc2/gadget.c`文件中的锁管理逻辑错误。`dwc2_gadget_exit_clock_gating`函数内部调用了`call_gadget`宏,该宏要求调用者必须预先持有`hsotg->lock`自旋锁,并在执行过程中进行解锁和重锁操作。然而,上游函数`dwc2_hsotg_udc_stop`在调用`dwc2_gadget_exit_clock_gating`之前并未获取该锁。这种锁的不匹配导致了两个严重后果:首先,内核在未持有锁的状态下执行`spin_unlock`,触发未定义行为;其次,`dwc2_gadget_exit_clock_gating`返回后,锁仍处于被持有状态,导致同一函数后续调用`spin_lock_irqsave`时发生死锁。本地攻击者可利用此缺陷触发系统崩溃。

攻击链分析

STEP 1
步骤1
攻击者获取本地系统的低权限访问。
STEP 2
步骤2
攻击者触发特定的USB设备操作或驱动状态变更,导致内核调用`dwc2_hsotg_udc_stop`函数。
STEP 3
步骤3
由于锁管理逻辑错误,内核在执行`dwc2_gadget_exit_clock_gating`时发生死锁。
STEP 4
步骤4
系统挂起或崩溃,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Simulation for CVE-2026-31756 * This code demonstrates the logic error causing the deadlock. * It is a simplified representation of the vulnerable kernel code. */ #include <linux/spinlock.h> struct hsotg { spinlock_t lock; }; /* Simulates the call_gadget() macro behavior */ void call_gadget_mock(struct hsotg *hsotg) { // Expects lock to be held spin_unlock(&hsotg->lock); // ... gadget callback ... spin_lock(&hsotg->lock); } /* Simulates dwc2_gadget_exit_clock_gating */ void vulnerable_function(struct hsotg *hsotg) { call_gadget_mock(hsotg); } /* Simulates dwc2_hsotg_udc_stop (The Vulnerable Caller) */ void trigger_vulnerability(struct hsotg *hsotg) { unsigned long flags; // VULNERABILITY: Calls vulnerable_function WITHOUT holding hsotg->lock first. // This leads to spin_unlock on an unlocked lock (undefined behavior) // and leaves the lock held afterwards. vulnerable_function(hsotg); // Later in the function, tries to acquire the lock spin_lock_irqsave(&hsotg->lock, flags); // DEADLOCK occurs here because the lock is already held. spin_unlock_irqrestore(&hsotg->lock, flags); }

影响范围

Linux Kernel (修复前版本)

防御指南

临时缓解措施
建议用户及时关注Linux内核更新并应用官方补丁。如果无法立即升级,可通过禁用dwc2驱动模块或严格限制本地用户权限来降低风险。

参考链接

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