[공격] 분석 — CVE-2025-71104
KVM HV‑timer bug (CVE-2025-71104) can cause host‑wide hard lockups when a guest VM stays inactive for long, and should be mitigated by patching the kernel or disabling the preemption timer.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00095 · 악용난이도 hard
🔍 공격 기법
-
공격 전제
- 대상 호스트가 Intel CPU 위에 KVM 하이퍼바이저를 구동하고 있으며
hv_timer(VMX preemption timer)가 활성화돼 있어야 함. - 공격자는 게스트 내부에서 로컬 권한(Low)만 확보하면 됨( CVSS AV:L/AC:L/PR:L/UI:N ).
- 대상 호스트가 Intel CPU 위에 KVM 하이퍼바이저를 구동하고 있으며
-
트리거 조건
- 게스트 안에서 주기적 APIC 타이머를 설정하고
hv_timer가 작동하도록 함. - 게스트를 장시간 비활성화(예:
virsh suspend, ACPI S3,systemctl suspend, 혹은 CPU‑핫플러그로 vCPU 정지)시켜 vCPU가 일정 시간 동안 실행되지 않게 만든다. - 그 사이에 KVM이 이전 타깃 만료 시점을 그대로 유지하고, 새로운 주기를 단순히 더하는 로직 때문에 목표 만료 시간이 과거가 된다.
- 게스트 안에서 주기적 APIC 타이머를 설정하고
-
실행 흐름
- 비활성화된 상태에서 vCPU가 재개되면
hv_timer는 “만료된” 타이머를 다시 프로그래밍한다. - 매번 같은 과거 시점에 주기를 더하면서 무한히 빠른 hrtimer IRQ가 발생하고, KVM은 이를 처리하지 못해 CPU 를 점유한다.
- 결과적으로 호스트 커널 스케줄러가 멈추고
hard lockup(CPU 전체 정지) 상태에 도달한다.
- 비활성화된 상태에서 vCPU가 재개되면
-
관측 지표
- dmesg//kern.log 에 “KVM: hv timer expired” 혹은 “hard lockup detected on CPU #” 메시지가 연속적으로 기록됨.
/proc/interrupts에서hv_timerIRQ 빈도가 급격히 상승.
-
공격 표면
- 게스트 내부 API·시스템 콜:
ioctl(KVM_SET_MSRS), APIC 타이머 설정, VM suspend/resume 명령. - 외부 인터페이스는 없음; 전형적인 로컬(게스트) 공격이다.
- 게스트 내부 API·시스템 콜:
악용 가능성: 이 취약점은 AV:L (로컬)이며 공격자는 해당 호스트에 직접 접근하거나 KVM을 실행 중인 게스트 내부에서 코드를 실행해야 합니다. AC:L (낮은 복잡도)와 PR:L (저권한)으로 평가된 이유는, 인텔 CPU에서 HV 타이머가 활성화된 상태라면 게스트가 APIC 타이머를 주기 모드로 설정하고 가상 머신을 장시간 일시정지·재개만 하면 되기 때문입니다. UI:N (사용자 인터랙션 불필요)이라는 점은 공격자가 별도의 사용자 입력 없이 자동으로 타이머 만료를 반복하도록 조작할 수 있음을 의미합니다. EPSS 0.00095 라는 매우 낮은 실측값과 KEV에 등재되지 않은 사실은 현재까지 실제 악용 사례가 거의 없으며, 이는 환경 의존성이 높고 재현 조건이 제한적임을 뒷받침합니다. 공격 표면은 KVM이 제공하는 가상 APIC 타이머 설정 인터페
💥 영향 분석
- 성공 시 호스트 전체가 응답 불가능해진다(Hard lockup).
- 멀티‑테넌트 클라우드 환경에서는 단일 악성 VM이 인프라 전체 가용성을 파괴할 수 있다.
- 현재 알려진 추가 권한 상승 경로는 없지만, 호스트가 완전히 정지하면 관리자가 복구 조치를 취하기 전까지 서비스 차단이 지속된다.
🔗 관련 취약점·체이닝
- 추정: 이 결함은 타이머 기반 하이퍼바이저 DoS와 유사한 패턴(“Timer‑reprogramming Race Condition”)을 공유한다.
- 동일한 KVM 타이머 로직을 이용하는 CVE‑2024‑XXXX(가상의 번호)와 같이,
hv_timer비활성화 시점에 발생하는 레이스 컨디션은 메모리 손상이나 VM Escape로 이어질 가능성이 있다(현재 증거는 없음). - 따라서 다른 하이퍼바이저 타이머 결함(예: VMX preemption timer overflow)과 연계될 경우, DoS 뒤에 권한 상승 또는 탈출 단계가 추가될 수 있다.
🔎 탐지
- 커널 로그에서
hard lockup혹은hv timer expired메시지가 일정 시간 내 다수 발생하면 경보. /proc/interrupts의hv_timerIRQ 카운트 급증(예: 1초당 10,000 +)을 모니터링.- QEMU/KVM 관리 인터페이스에서 비정상적으로 긴 VM pause/suspend 기간을 감시한다(> 5 분 연속).
🛡️ 완화 방안
- 즉시: 해당 커널 버전(4.14.45‑4.15, 4.16.13‑4.17, …, 6.13‑6.18.3)에서 제공되는 패치를 적용한다.
- 패치가 불가능한 경우:
kvm_intel.preempt_timer=0커널 부팅 파라미터(또는/sys/module/kvm_intel/parameters/preempt_timer) 로 HV 타이머를 비활성화한다. - VM 관리 정책에 장시간 pause/suspend 제한을 두고, 자동 복구 스크립트로 호스트 CPU 사용률 급증 시 KVM 서비스를 재시작하도록 설정한다.
- 장기적으로는 최신 커널·QEMU 조합으로 업그레이드하고, 하이퍼바이저 타이머 로그를 중앙 SIEM에 연계해 실시간 알림을 구성한다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00095 · exploit=hard · in_scope=None