🇰🇷 한글 설명
Linux 커널의 KVM 내 중첩 가상화(nSVM) 구현에서 인터럽트 섀도우 상태가 캐시된 vmcb12에 적절히 동기화되지 않는 취약점이 발견되었습니다. 특정 복구 경로에서 인터럽트 상태가 잘못된 위치에 저장될 경우, L2 게스트 가상 머신이 중단되거나 멈추는 현상이 발생할 수 있습니다.
💡 쉬운 설명
가상 컴퓨터 안에서 또 다른 가상 컴퓨터를 실행할 때, 컴퓨터의 신호(인터럽트)를 처리하는 정보가 엉뚱한 곳에 저장되는 문제입니다. 이로 인해 가상 컴퓨터가 특정 상황에서 응답하지 않고 멈춰버릴 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
KVM: nSVM: Sync interrupt shadow to cached vmcb12 after VMRUN of L2
After VMRUN in guest mode, nested_sync_control_from_vmcb02() syncs
fields written by the CPU from vmcb02 to the cached vmcb12. This is
because the cached vmcb12 is used as the authoritative copy of some of
the controls, and is the payload when saving/restoring nested state.
int_state is also written by the CPU, specifically bit 0 (i.e.
SVM_INTERRUPT_SHADOW_MASK) for nested VMs, but it is not sync'd to
cached vmcb12. This does not cause a problem if KVM_SET_NESTED_STATE
preceeds KVM_SET_VCPU_EVENTS in the restore path, as an interrupt shadow
would be correctly restored to vmcb02 (KVM_SET_VCPU_EVENTS overwrites
what KVM_SET_NESTED_STATE restored in int_state).
However, if KVM_SET_VCPU_EVENTS preceeds KVM_SET_NESTED_STATE, an
interrupt shadow would be restored into vmcb01 instead of vmcb02. This
would mostly be benign for L1 (delays an interrupt), but not for L2. For
L2, the vCPU could hang (e.g. if a wakeup interrupt is delivered before
a HLT that should have been in an interrupt shadow).
Sync int_state to the cached vmcb12 in nested_sync_control_from_vmcb02()
to avoid this problem. With that, KVM_SET_NESTED_STATE restores the
correct interrupt shadow state, and if KVM_SET_VCPU_EVENTS follows it
would overwrite it with the same value.
📍 영향받는 시스템
Linux Kernel (KVM nSVM 기능을 사용하는 중첩 가상화 환경)
⚔️ 공격 벡터
로컬 공격자가 중첩 가상화 환경의 특정 상태 복구 시퀀스를 유도하여 L2 게스트의 서비스 거부(DoS) 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 nested_sync_control_from_vmcb02() 함수 수정 사항 반영
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.