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

CVE-2026-43161 Linux内核IOMMU死锁漏洞

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务IOMMUPCIeATSDeadlock本地漏洞

漏洞概述

Linux内核的iommu/vt-d驱动模块存在一个安全漏洞。当启用了ATS(地址转换服务)的PCIe设备在链路断开(例如意外拔出或链路故障)时,如果系统未启用Intel IOMMU可扩展模式,内核仍会尝试执行设备IOTLB刷新。由于设备已断开连接,该刷新操作无法完成,导致IOMMU硬件无限等待,最终造成主机系统硬死锁。此漏洞允许本地低权限攻击者通过触发设备断开连接事件,导致整个系统拒绝服务。

技术细节

该漏洞源于Intel VT-d IOMMU驱动在处理PCIe设备断开连接时的逻辑缺陷。当启用了ATS的PCIe端点设备被分配给用户空间(如通过VFIO用于QEMU或DPDK),且设备物理链路发生故障或被意外移除时,系统尝试清理IOMMU上下文。在未启用Intel IOMMU可扩展模式的情况下,内核调用`qi_flush_dev_iotlb`函数发送ATS失效请求。由于链路断开,硬件无法响应,但代码未能像可扩展模式那样检查设备可达性。这导致`qi_submit_sync`无限期阻塞,引发主机硬死锁。攻击者可通过控制虚拟机或用户进程触发设备断开逻辑导致宿主机崩溃。

攻击链分析

STEP 1
步骤1:环境准备
攻击者获取对Linux系统的本地访问权限,该系统配置了Intel IOMMU且禁用了可扩展模式,并拥有支持ATS的PCIe设备(如网卡)。
STEP 2
步骤2:设备分配
攻击者将PCIe设备通过VFIO透传给用户空间程序(如QEMU虚拟机或DPDK应用),并确保ATS功能处于启用状态。
STEP 3
步骤3:触发链路断开
攻击者通过虚拟化管理命令(如virsh destroy)或物理方式触发设备链路断开或设备移除事件。
STEP 4
步骤4:内核死锁
内核在处理设备释放时调用IOMMU清理代码,尝试向不可达的设备发送ATS失效请求。由于未检查设备状态,CPU在等待响应时无限期挂起。
STEP 5
步骤5:系统崩溃
主机系统发生硬死锁,必须重启才能恢复,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Concept for CVE-2026-43161 * This requires a system with Intel IOMMU, ATS capable device, and Scalable Mode disabled. * Triggering a device link drop (e.g., surprise removal) leads to a system hard lock. */ #include <linux/module.h> #include <linux/pci.h> static int __init poc_init(void) { struct pci_dev *pdev = NULL; // Find an ATS enabled device passed through to userspace while ((pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pdev))) { if (pdev->ats_enabled) { printk(KERN_INFO "Found ATS device: %s\n", pci_name(pdev)); // Simulate the scenario where the link drops or device is removed. // In a real exploit, this is triggered by physical removal or hypervisor action. // The kernel path qi_flush_dev_iotlb will be called without checking presence. // This leads to qi_submit_sync deadlock. break; } } return 0; } static void __exit poc_exit(void) { printk(KERN_INFO "Exiting PoC.\n"); } module_init(poc_init); module_exit(poc_exit); MODULE_LICENSE("GPL");

影响范围

Linux Kernel(主分支及稳定版分支修复前的版本)

防御指南

临时缓解措施
限制对PCIe设备透传功能的访问权限,仅允许受信任的用户使用。如果硬件支持,建议启用Intel IOMMU可扩展模式以规避死锁条件。避免在不稳定的环境中对关键设备进行热插拔操作。

参考链接

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