IPBUF安全漏洞报告
English
CVE-2026-31667 CVSS 7.8 高危

CVE-2026-31667: Linux内核uinput死锁漏洞

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务死锁uinput本地漏洞

漏洞概述

Linux内核中的uinput模块存在一个循环锁依赖漏洞。该漏洞在使用力反馈游戏手柄配合uinput时,由于互斥锁的获取顺序不当(ff->mutex -> udev->mutex -> input_mutex -> dev->mutex -> ff->mutex),可能导致系统死锁。这允许本地低权限攻击者通过触发特定的设备操作路径,引发系统拒绝服务。

技术细节

该漏洞的核心在于Linux内核input子系统中四个锁获取路径形成了闭环:1. ff上传路径持有ff->mutex并获取udev->mutex;2. 设备创建路径持有udev->mutex并获取input_mutex;3. 设备注册路径持有input_mutex并获取dev->mutex;4. evdev释放路径持有dev->mutex并获取ff->mutex。当这些路径并发执行时,会导致死锁。攻击者可利用本地低权限账户,通过特制的uinput设备操作力反馈上传和设备释放,触发锁竞争,导致系统挂起。修复方式引入了state_lock自旋锁来打破原有的锁依赖链。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限账户访问权限。
STEP 2
步骤2
攻击者编写恶意程序,利用uinput接口创建虚拟输入设备并启用力反馈功能。
STEP 3
步骤3
程序在多线程环境下并发执行设备创建、力反馈上传和设备销毁操作。
STEP 4
步骤4
触发内核中的循环锁依赖,导致系统死锁或无响应。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <linux/uinput.h> #include <fcntl.h> #include <string.h> #include <unistd.h> // PoC Concept: Trigger circular locking dependency // This requires a setup that mimics the interaction between uinput and ff-core. int main() { int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); if (fd < 0) return 1; // Enable Force Feedback capability ioctl(fd, UI_SET_EVBIT, EV_FF); // ... setup device ... // Create device struct uinput_user_dev uidev = {0}; strcpy(uidev.name, "PoC-Device"); write(fd, &uidev, sizeof(uidev)); ioctl(fd, UI_DEV_CREATE); // Trigger upload effect (holds ff->mutex, tries udev->mutex) struct ff_effect effect = {0}; ioctl(fd, EVIOCSFF, &effect); // Concurrently trigger release/destroy operations to race with upload // This requires multi-threading to hit the specific lock order race condition. close(fd); return 0; }

影响范围

Linux Kernel (Stable versions prior to fix commits)

防御指南

临时缓解措施
建议立即更新Linux内核。如果无法立即更新,可以通过禁用uinput内核模块(modprobe -r uinput)或限制本地用户权限来缓解风险。

参考链接

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