🔍 CVE-2026-89913

8.8
CVSS Score
HIGH
2026-09-16
2026-10-21 13:20
✅ 완료

🇰🇷 한글 설명

Linux 커널의 KVM arm64 vgic-v3 구현에서 LPI(Locality-specific Peripheral Interrupt) 참조를 적절히 유지하지 않아 발생하는 레이스 컨디션 취약점입니다. xarray 반복문 사용 중 참조 카운트가 부족하여, 다른 경로에서 LPI가 해제된 후 잘못된 메모리 주소에 접근하게 되어 시스템 충돌이나 보안 문제가 발생할 수 있습니다.

💡 쉬운 설명

컴퓨터의 핵심 부품인 커널이 인터럽트 정보를 처리하는 과정에서, 이미 삭제된 정보를 참조하려고 시도하여 발생하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 해커가 시스템 권한을 탈취할 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: vgic-v3: take an LPI reference in vgic_v3_save_pending_tables vgic_v3_save_pending_tables() iterates dist->lpi_xa using xa_for_each() and dereferences the returned struct vgic_irq in the loop body without holding a reference on the LPI. The xarray iterator only provides temporary RCU coverage while looking up the current entry. That is not sufficient for this loop body, which reads fields from struct vgic_irq and performs guest memory accesses before the iteration completes. A concurrent path can trigger this race: the irqfd cached injection path (vgic_its_inject_cached_translation) obtains a transient LPI reference via vgic_its_check_cache() without holding kvm->lock, vcpu->mutex, config_lock, or its_lock. If guest ITS DISCARD then drops the cache and ITE references under its_lock, the transient inject reference may become the final one. When vgic_put_irq() drops it, the LPI is erased from lpi_xa and freed via kfree_rcu(). Meanwhile, vgic_v3_save_pending_tables() may still hold a stale pointer obtained from the xarray iterator and dereference it after the RCU grace period completes. Fix this by re-fetching each iterated LPI via vgic_get_irq(), which takes a stable reference, and dropping it with vgic_put_irq() on all paths. This matches the pattern already used by other lpi_xa iterators in the vgic ITS code.

📍 영향받는 시스템

Linux kernel (arm64 architecture, KVM vgic-v3 enabled)

⚔️ 공격 벡터

게스트 OS에서 ITS DISCARD를 유도하여 특정 타이밍에 LPI 참조를 해제함으로써 발생하는 레이스 컨디션 공격

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 vgic_get_irq()를 통한 안정적인 참조를 확보해야 함

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel