🇰🇷 한글 설명
Linux 커널의 KVM x86 MMU에서 NPT 사용 시 NX 비트를 유효한 SPTE 비트로 처리하도록 수정되었습니다. NX hugepage 완화 기능이 활성화되면 KVM이 NX 비트를 설정하는데, 이를 예약된 비트로 간주하여 WARN 경고가 발생하던 문제를 해결합니다.
💡 쉬운 설명
가상화 환경에서 특정 보안 기능을 켰을 때 커널이 잘못된 경고를 내고 불안정해질 수 있는 문제입니다. 이번 수정으로 해당 보안 기능과 가상화가 함께 올바르게 동작하도록 바뀝니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
KVM: x86/mmu: Treat NX as a valid SPTE bit for NPT
Treat the NX bit as valid when using NPT, as KVM will set the NX bit when
the NX huge page mitigation is enabled (mindblowing) and trigger the WARN
that fires on reserved SPTE bits being set.
KVM has required NX support for SVM since commit b26a71a1a5b9 ("KVM: SVM:
Refuse to load kvm_amd if NX support is not available") for exactly this
reason, but apparently it never occurred to anyone to actually test NPT
with the mitigation enabled.
------------[ cut here ]------------
spte = 0x800000018a600ee7, level = 2, rsvd bits = 0x800f0000001fe000
WARNING: CPU: 152 PID: 15966 at arch/x86/kvm/mmu/spte.c:215 make_spte+0x327/0x340 [kvm]
Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 10.48.0 01/27/2022
RIP: 0010:make_spte+0x327/0x340 [kvm]
Call Trace:
<TASK>
tdp_mmu_map_handle_target_level+0xc3/0x230 [kvm]
kvm_tdp_mmu_map+0x343/0x3b0 [kvm]
direct_page_fault+0x1ae/0x2a0 [kvm]
kvm_tdp_page_fault+0x7d/0x90 [kvm]
kvm_mmu_page_fault+0xfb/0x2e0 [kvm]
npf_interception+0x55/0x90 [kvm_amd]
svm_invoke_exit_handler+0x31/0xf0 [kvm_amd]
svm_handle_exit+0xf6/0x1d0 [kvm_amd]
vcpu_enter_guest+0xb6d/0xee0 [kvm]
? kvm_pmu_trigger_event+0x6d/0x230 [kvm]
vcpu_run+0x65/0x2c0 [kvm]
kvm_arch_vcpu_ioctl_run+0x355/0x610 [kvm]
kvm_vcpu_ioctl+0x551/0x610 [kvm]
__se_sys_ioctl+0x77/0xc0
__x64_sys_ioctl+0x1d/0x20
do_syscall_64+0x44/0xa0
entry_SYSCALL_64_after_hwframe+0x46/0xb0
</TASK>
---[ end trace 0000000000000000 ]---
📍 영향받는 시스템
NPT(AMD SVM) 기반 KVM을 사용하며 NX hugepage 완화가 활성화된 Linux 커널 환경
⚔️ 공격 벡터
로컬 권한을 가진 가상 머신 또는 사용자가 해당 조건을 유발해 커널 경고(WARN)와 서비스 중단을 일으킬 수 있음
🛡️ 대응 방법
패치된 Linux 커널 버전으로 업데이트하여 재부팅합니다
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 업데이트 목록과 대조해 패치 반영 여부를 확인하며, 패치된 버전보다 낮거나 같은 경우 업데이트가 필요합니다