IPBUF安全漏洞报告
English
CVE-2026-43253 CVSS 7.5 高危

CVE-2026-43253 Linux内核AMD IOMMU拒绝服务漏洞

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

漏洞信息

漏洞编号
CVE-2026-43253
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernel拒绝服务DoSIOMMU软死锁Race Condition内核漏洞

漏洞概述

Linux内核中的AMD IOMMU驱动程序存在拒绝服务漏洞。在启用iommu.strict=1且处于高压力环境下,现有的完成等待路径会触发软死锁。根本原因在于wait_on_sem()函数在持有自旋锁并禁用中断的情况下进行忙等待。该操作仅轮询硬件更新的cmd_sem,实际上并不需要iommu->lock,但持有锁进行忙等待不必要地增加了资源争用,延长了中断禁用时间,导致系统失去响应。

技术细节

该漏洞位于Linux内核的iommu/amd驱动模块中,涉及iommu_completion_wait()函数的执行逻辑。原代码在持有自旋锁的状态下调用了wait_on_sem()。wait_on_sem()是一个忙等待函数,用于轮询硬件命令信号量以确认操作完成。由于自旋锁期间中断是关闭的,如果在高负载下硬件响应缓慢,长时间的忙等待会导致CPU无法处理其他中断,从而引发“soft lockup”内核恐慌。修复方案是将iommu_completion_wait()中的完成等待操作移至自旋锁之外。wait_on_sem()仅读取硬件寄存器,不涉及iommu->lock保护的临界区数据,因此不需要锁保护。通过释放锁再进行等待,允许中断响应,消除了死锁风险。攻击者可通过触发大量IOMMU操作并设置iommu.strict=1,利用该缺陷导致系统崩溃。

攻击链分析

STEP 1
环境准备
攻击者目标系统运行受影响版本的Linux内核,启用了AMD IOMMU,并设置了iommu.strict=1参数。
STEP 2
实施压力测试
攻击者通过高频率的I/O操作或DMA操作,使IOMMU硬件处于繁忙状态,导致命令完成时间变长。
STEP 3
触发漏洞
驱动程序调用iommu_completion_wait(),该函数在自旋锁内调用wait_on_sem()进行忙等待。由于中断被禁用且等待时间过长,触发软死锁。
STEP 4
达成拒绝服务
系统检测到软死锁,内核恐慌或CPU挂起,导致系统崩溃或服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual Proof of Concept for CVE-2026-43253 * This code simulates the vulnerable condition where a spinlock is held * during a busy-wait loop, causing a soft lockup. * * To test: Load this module in a Linux kernel environment with AMD IOMMU. */ #include <linux/module.h> #include <linux/kernel.h> #include <linux/spinlock.h> #include <linux/delay.h> static DEFINE_SPINLOCK(vuln_lock); static int __init poc_init(void) { unsigned long flags; int i; printk(KERN_INFO "CVE-2026-43253 PoC: Triggering soft lockup simulation...\n"); // Acquire spinlock (disables interrupts) spin_lock_irqsave(&vuln_lock, flags); // Simulate wait_on_sem() busy waiting inside the spinlock // In the real vulnerability, this waits for hardware. // This loop runs for a significant time to trigger the watchdog. for (i = 0; i < 1000000000; i++) { // Busy wait without sleeping or scheduling barrier(); } // Release spinlock (re-enables interrupts) spin_unlock_irqrestore(&vuln_lock, flags); return 0; } static void __exit poc_exit(void) { printk(KERN_INFO "CVE-2026-43253 PoC: Unloaded.\n"); } module_init(poc_init); module_exit(poc_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("PoC for CVE-2026-43253 Soft Lockup");

影响范围

Linux Kernel < 5.10.218
Linux Kernel < 5.15.159
Linux Kernel < 6.1.91
Linux Kernel < 6.6.31
Linux Kernel < 6.8.10

防御指南

临时缓解措施
建议立即将Linux内核更新到修复了该漏洞的最新稳定版本。如果无法立即重启更新,可以通过修改内核启动参数(grub配置),移除iommu.strict=1,将IOMMU模式设置为非严格模式。这可以避免在自旋锁内进行长时间的忙等待,从而防止软死锁的发生。需要注意的是,关闭严格模式可能会降低系统在某些DMA攻击场景下的安全性。

参考链接

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