CVE-2026-99178 in Linux
요약
\~에 의해 VulDB • 2026. 10. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
x86/kvm: NMI 컨텍스트에서의 커널 #PF 시 비동기 #PF 플래그를 소모하지 않음
비동기 #PF "페이지 없음(page not present)" 이벤트는 #PF 벡터를 통해 도착하며, 그 원인은 __kvm_handle_async_pf()가 이를 읽고 지울 때까지 per-CPU apf_reason.flags에 저장됩니다. 만약 이벤트가 주입된 후 #PF 핸들러가 플래그를 읽기 전에 NMI가 발생하고, 해당 NMI 핸들러 자체가 #PF를 일으킨다면, 그 결함(fault)은 중단된 #PF의 플래그를 읽고 지웁니다. 그런 다음 인터럽트가 비활성화된 NMI 컨텍스트에서 발견되어 패닉(panic)을 유발합니다:
Kernel panic - not syncing: Host injected async #PF in interrupt disabled region Call Trace: <NMI> panic+0x52/0x60 __kvm_handle_async_pf+0xb0/0xb0 exc_page_fault+0x71/0xb0 asm_exc_page_fault+0x27/0x30 RIP: 0010:__get_user_nocheck_8+0x6/0x20 perf_callchain_user+0x147/0x1a0 get_perf_callchain+0x12d/0x1c0 ... perf_event_nmi_handler+0x26/0x50 exc_nmi+0xe8/0x110 RIP: 0010:asm_exc_page_fault+0x0/0x30 </NMI>
마지막 RIP 행은 NMI가 #PF 진입의 첫 번째 명령어에 도달하는 것을 보여줍니다. 사용자 호출 체인을 사용하는 perf는 이러한 결함을 유발합니다: 샘플링 NMI는 __get_user()를 사용하여 사용자 스택을 탐색하며, 저장된 프레임 포인터가 유효한 사용자 주소가 아니거나 탐색이 스택 상단으로 벗어나면 결함이 발생합니다. KVM이 DELIVERY_AS_PF_VMEXIT로 실행되는 L1 하이퍼바이저로서 #PF VM-exit 이후 자체적으로 플래그를 읽을 때도 동일한 창(window)이 존재합니다.
NMI 진입 코드는 이러한 중첩(nesting)에 대해 CR2는 저장 및 복원하지만, 비동기 #PF 원인은 그렇지 않습니다. Andy Lutomirski는 2020년에 async #PF 전달 방식이 재작업(rework)될 당시 perf를 예시로 들어 이 레이스 조건(race condition)을 설명했습니다[1]. NMI 간 CR2 옆에서 플래그를 저장하고 지우는 것은 그곳에서 논의되었지만 병합되지 않았습니다.
그 재작업 이후 리눅스는 KVM_ASYNC_PF_SEND_ALWAYS 설정을 중지했으므로, 호스트는 "페이지 없음" 이벤트를 사용자 모드 결함에만 전달하며, NMI 컨텍스트(커널 모드 #MC 및 #DB 포함)에서의 커널 모드 결함은 비동기 페이지 결함이 될 수 없습니다. 이 경우 플래그를 건드리지 않고 반환하여 중단된 핸들러가 이를 원본 그대로 찾도록 합니다.
v7.3-rc5에서 테스트되었으며, 스냅샷으로부터 복원된 4-vCPU, 2 GiB 게스트 환경에서 수행되었습니다. 여기서 메모리는 userfaultfd를 통해 요구 시 제공되므로, 읽기 작업은 비동기 #PF를 유발합니다. 또한 모든 스레드는 사용자 호출 체인과 함께 하드웨어 사이클을 샘플링하고 프레임 포인터를 매핑되지 않은 페이지에 지정합니다. 이 패치 없이 실행하면 게스트는 위에서 설명한 대로 3회 중 3회에서 패닉했습니다. 이 패치를 적용하면 게스트는 60초 동안의 테스트에서 3회 모두 생존했으며, 호스트는 각 테스트 시작 후 처음 20초 사이에 kvm_async_pf_not_present 이벤트를 148,441개에서 153,334개까지 카운트했습니다. v6.18.50에서도 결과가 동일했습니다: 패치 없이 실행하면 게스트가 패닉하고, 적용 시 생존했습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.