🇰🇷 한글 설명
Linux 커널의 KVM 내 nVMX 구현에서 VPID02 할당 시 초기 플러시가 누락되어 발생하는 취약점입니다. 이로 인해 이전 가상 머신이나 다른 vCPU의 오래된 TLB 엔트리가 재사용될 수 있습니다.
💡 쉬운 설명
컴퓨터가 이전에 사용했던 메모리 주소 정보를 제대로 지우지 않고 새 작업에 재사용하면서 발생하는 보안 문제입니다. 이로 인해 다른 사용자의 데이터가 유출되거나 잘못된 메모리에 접근할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
KVM: nVMX: Always flush vpid02 on first use
Make sure vpid02 is always flushed on first use by setting last_vpid=0
when allocating vpid02. nested_vmx_transition_tlb_flush() will always
detect a VPID change on first VM-Enter after VMXON, because VPID=0 in
vmcs12 is not allowed if L1 enables VPID.
This avoids using stale TLB entries from a previous lifetime of the
VPID, that might have been associated with a different vCPU (or a
completely different VM).
Note that last_vpid is already being initialized as 0 when the vCPU is
created, but it is not reset when vpid02 is freed on VMXOFF. Hence, the
problem can only occur if L1 does VMXOFF -> VMXON, runs an L2, and KVM
happens to reuse a VPID that has TLB entries on the physical CPU.
📍 영향받는 시스템
Linux Kernel (KVM/nVMX 관련 모듈 사용 환경)
⚔️ 공격 벡터
중첩 가상화(Nested Virtualization) 환경에서 VMXOFF 후 VMXON을 반복하여 이전 VPID의 잔류 TLB 데이터를 이용한 공격
🛡️ 대응 방법
VPID02 할당 시 last_vpid를 0으로 설정하여 항상 TLB를 플러시하도록 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
현재 커널 버전과 KVM 설정 활성화 여부를 확인하여 최신 보안 패치가 적용된 커널인지 검토합니다.
uname -r && grep -i 'KVM' /boot/config-$(uname -r) 2>/dev/null