CVE-2026-23005
x86/fpu: XFD[i]=1일 때 게스트 XSAVE 상태의 XSTATE_BV[i]를 지웁니다
- 게시됨
- 2026. 1. 25.
- 업데이트됨
- 2026. 9. 8.
- CNA 할당 중
- Linux
- 증거 관찰됨
- 2026. 8. 6.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H낮음 · 다음 30일
- 백분위수
- 11.1%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
리눅스 커널에서 다음 취약점이 해결되었습니다: x86/fpu: 게스트 XSAVE 상태에서 XFD[i]=1일 때마다 XSTATE_BV[i]를 클리어 KVM_SET_XSAVE를 통해 게스트 XSAVE 상태를 로드할 때, 그리고 게스트 WRMSR에 대응하여 XFD를 업데이트할 때, 저장된(또는 복원될) XSTATE_BV에서 XFD로 비활성화된 기능을 클리어하여 KVM이 게스트의 XFD를 통해 비활성화된 기능에 대한 상태를 로드하려 시도하지 않도록 합니다. 커널이 게스트의 XFD로 XRSTOR를 실행하기 때문에, XFD[i]=1인 상태에서 XSTATE_BV[i]=1을 저장하면 XRSTOR가 #NM을 발생시켜 커널이 패닉하게 됩니다. 예를 들어 fpu_update_guest_xfd()가 XSTATE_BV를 클리어하지 않고 XFD를 설정하는 경우: ------------[ cut here ]------------ WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#29: amx_test/848 Modules linked in: kvm_intel kvm irqbypass CPU: 29 UID: 1000 PID: 848 Comm: amx_test Not tainted 6.19.0-rc2-ffa07f7fd437-x86_amx_nm_xfd_non_init-vm #171 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:exc_device_not_available+0x101/0x110 Call Trace: <TASK> asm_exc_device_not_available+0x1a/0x20 RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90 switch_fpu_return+0x4a/0xb0 kvm_arch_vcpu_ioctl_run+0x1245/0x1e40 [kvm] kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm] __x64_sys_ioctl+0x8f/0xd0 do_syscall_64+0x62/0x940 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- 이 상황은 게스트가 WRMSR(MSR_IA32_XFD)을 실행하여 XFD[18] = 1을 설정하고, 호스트 IRQ가 vmexit 핸들러의 fpu_update_guest_xfd() 호출 이전에 kernel_fpu_begin()을 트리거하는 경우 발생할 수 있습니다. 그리고 사용자 공간이 KVM_SET_XSAVE를 통해 XSTATE_BV[i]=1을 넣는 경우: ------------[ cut here ]------------ WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#14: amx_test/867 Modules linked in: kvm_intel kvm irqbypass CPU: 14 UID: 1000 PID: 867 Comm: amx_test Not tainted 6.19.0-rc2-2dace9faccd6-x86_amx_nm_xfd_non_init-vm #168 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:exc_device_not_available+0x101/0x110 Call Trace: <TASK> asm_exc_device_not_available+0x1a/0x20 RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90 fpu_swap_kvm_fpstate+0x6b/0x120 kvm_load_guest_fpu+0x30/0x80 [kvm] kvm_arch_vcpu_ioctl_run+0x85/0x1e40 [kvm] kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm] __x64_sys_ioctl+0x8f/0xd0 do_syscall_64+0x62/0x940 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- 새로운 동작은 AMX 아키텍처와 일치합니다. Intel의 SDM에 따르면, XSAVE는 XFD를 통해 비활성화된 구성 요소에 대해 XSTATE_BV를 '0'으로 저장합니다(비압축 XSAVE는 상태 구성 요소의 초기 구성을 저장합니다): XSAVE, XSAVEC, XSAVEOPT 또는 XSAVES가 상태 구성 요소 i를 저장하는 경우, XCR0[i] = IA32_XFD[i] = 1일 때 명령어는 #NM을 생성하지 않습니다. 대신 XINUSE[i] = 0인 것처럼 동작합니다(그리고 상태 구성 요소는 초기 상태였습니다): XSAVE 헤더의 XSTATE_BV 필드의 비트 i를 0으로 저장합니다. 또한 XSAVE는 상태 구성 요소의 초기 구성을 저장합니다(다른 명령어는 상태 구성 요소 i를 저장하지 않습니다). 대안으로, KVM은 항상 XFD=0으로 XRSTOR를 수행할 수 있습니다. 예를 들어 struct fpu_guest에 대해 XSAVEing할 때 활성화된 기능 집합을 기반으로 상수 XFD를 사용하는 것입니다. 그러나 XFD로 비활성화된 기능에 대해 XSTATE_BV[i]=1을 갖는 것은 위의 인터럽트 경우 또는 선점 가능한 커널에서의 선점과 관련된 유사한 시나리오에서만 발생할 수 있습니다. fpu_swap_kvm_fpstate()의 save_fpregs_to_fpstate() 호출이 현재 XFD로 나가는 FPU 상태를 저장하기 때문입니다. 그리고 그것은(XFD에 대한 첫 번째 WRMSR을 제외한 모든 경우에) 게스트 XFD입니다. 따라서 XFD는 위의 인터럽트 경우 또는 선점 가능한 커널에서의 선점과 관련된 유사한 시나리오에서만 XSTATE_BV와 동기화되지 않을 수 있으며, KVM_GET_XSAVE가 XFD로 비활성화된 기능에 대해 XSTATE_BV[i]=0을 반환하는 것을 (사실상) KVM ABI의 일부로 간주할 수 있습니다. [클리어 이동 ---truncated---
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.