🇰🇷 한글 설명
Linux 커널의 KVM(Kernel-based Virtual Machine)에서 nVMX 관련 일관성 검사 시점이 부적절하여 발생하는 취약점입니다. 특정 조건에서 CR3 레지스터가 제대로 복구되지 않아 L1 게스트가 KVM의 제어 범위를 벗어난 메모리 주소를 사용할 수 있는 위험이 있습니다.
💡 쉬운 설명
가상 머신을 실행할 때 컴퓨터의 핵심 메모리 주소를 관리하는 규칙이 어긋나서 발생하는 문제입니다. 이로 인해 가상 머신이 실제 컴퓨터의 중요한 메모리 영역에 잘못 접근할 수 있는 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
KVM: nVMX: Move vTPR vs. TPR Threshold consistency check into "normal" checks
Move the off-by-default consistency check for vmcs12.tpr_threshold vs.
the virtual APIC vTPR into the "normal" controls checks, as waiting until
KVM has loaded some amount of state is unnecessary and actively dangerous.
Specifically, failure to unwind vmcs01.GUEST_CR3 to KVM's value when EPT
is disabled results in KVM running L1 with an L1-controlled CR3, not with
KVM's CR3!
Alternatively, KVM could simply reset the MMU to force a reload of
vmcs01.GUEST_CR3, but the _only_ reason the check was shoved into a "late"
flow was to wait until the vmcs12 pages were retrieved. Rather than build
up more crusty code, simply access vTPR using a regular guest memory access
(performance isn't a concern). To circumvent the restrictions that led to
KVM deferring nested_get_vmcs12_pages(), (a) use a VM-scoped API to read
guest memory so that it always hits non-SMM memslots (for RSM), and (b)
skip the check (since its off-by-default anyways) when the vCPU doesn't
want to run, i.e. when userspace is restoring/stuffing state.
If reading guest memory fails, simply skip the consistency check, as KVM's
de facto ABI is that VMX instruction accesses to non-existent memory get
PCI Bus Error semantics, where reads return 0xFFs. And if vTPR=0xFF, then
the vTPR is guaranteed to be greater than or equal to TPR_THRESHOLD.
📍 영향받는 시스템
Linux Kernel (KVM/nVMX 기능 사용 시)
⚔️ 공격 벡터
취약한 KVM 설정이 활성화된 환경에서 중첩 가상화(Nested Virtualization)를 이용한 메모리 관리 권한 탈취
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.