🇰🇷 한글 설명
Linux 커널 KVM arm64 구현에서, 게스트가 지원되지 않는 MMIO 접근으로 동기식 외부 abort를 받은 상태임에도 KVM이 MMIO 명령을 완료(PC 진행)처리하던 문제를 수정했습니다. 이로 인해 사용자 공간에서 커널 WARN이 쉽게 유발될 수 있었습니다. 수정은 동기 예외가 보류 중이면 MMIO 에뮬레이션을 건너뛰도록 합니다.
💡 쉬운 설명
가상머신이 존재하지 않는 장치에 접근했을 때 오류 처리가 잘못되어 커널 경고가 발생할 수 있었습니다. 이번 수정으로 오류 상황에서는 명령을 잘못 완료 처리하지 않도록 바로잡았습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
KVM: arm64: Don't retire aborted MMIO instruction
Returning an abort to the guest for an unsupported MMIO access is a
documented feature of the KVM UAPI. Nevertheless, it's clear that this
plumbing has seen limited testing, since userspace can trivially cause a
WARN in the MMIO return:
WARNING: CPU: 0 PID: 30558 at arch/arm64/include/asm/kvm_emulate.h:536 kvm_handle_mmio_return+0x46c/0x5c4 arch/arm64/include/asm/kvm_emulate.h:536
Call trace:
kvm_handle_mmio_return+0x46c/0x5c4 arch/arm64/include/asm/kvm_emulate.h:536
kvm_arch_vcpu_ioctl_run+0x98/0x15b4 arch/arm64/kvm/arm.c:1133
kvm_vcpu_ioctl+0x75c/0xa78 virt/kvm/kvm_main.c:4487
__do_sys_ioctl fs/ioctl.c:51 [inline]
__se_sys_ioctl fs/ioctl.c:893 [inline]
__arm64_sys_ioctl+0x14c/0x1c8 fs/ioctl.c:893
__invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:49
el0_svc_common+0x1e0/0x23c arch/arm64/kernel/syscall.c:132
do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:151
el0_svc+0x38/0x68 arch/arm64/kernel/entry-common.c:712
el0t_64_sync_handler+0x90/0xfc arch/arm64/kernel/entry-common.c:730
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
The splat is complaining that KVM is advancing PC while an exception is
pending, i.e. that KVM is retiring the MMIO instruction despite a
pending synchronous external abort. Womp womp.
Fix the glaring UAPI bug by skipping over all the MMIO emulation in
case there is a pending synchronous exception. Note that while userspace
is capable of pending an asynchronous exception (SError, IRQ, or FIQ),
it is still safe to retire the MMIO instruction in this case as (1) they
are by definition asynchronous, and (2) KVM relies on hardware support
for pending/delivering these exceptions instead of the software state
machine for advancing PC.
📍 영향받는 시스템
패치 이전의 Linux 커널 (KVM arm64 지원, ARM64 호스트에서 KVM을 사용하는 환경)
⚔️ 공격 벡터
KVM 사용자 공간 프로세스가 지원되지 않는 MMIO 접근을 유발하여 커널 WARN을 발생시키는 방식으로 서비스 거부 수준의 영향을 줄 수 있습니다.
🛡️ 대응 방법
배포판 제공 최신 커널 업데이트를 적용하거나 해당 upstream 수정이 포함된 커널로 재부팅합니다.
🔧 검증 코드
현재 실행 중인 커널 버전과 설치된 커널 패키지 정보를 확인하여, 배포판 보안 공지에서 CVE-2024-53196 수정이 포함된 버전인지 비교합니다. 해당 버전보다 새로우면 패치된 것으로 판단합니다.
uname -r && (dpkg -l linux-image-$(uname -r) 2>/dev/null | grep -E '^ii' || rpm -q kernel 2>/dev/null)