GITS_CTLREnableLPIs雖然虛擬機逃逸漏洞相當罕見,但它們是虛擬化技術最危險的一類漏洞,因為它破壞了雲端運算所仰賴的隔離邊界。過往公開的 KVM 逃逸攻擊多針對 x86 架構,通常是透過 QEMU 或 AMD 特定的程式碼 。而 ITScape 是第一個展示如何從一個不具特權的 arm64 訪客虛擬機,直接透過核心內的 KVM 程式碼本身 進行突破的攻擊程式,完全無需仰賴用戶空間模擬器的錯誤
。
對於運行 AWS Graviton、Ampere Altra 或任何採用 arm64 KVM 主機的多租戶工作負載的雲端供應商來說,一個訪客虛擬機可以做到:
存在漏洞的程式碼位於 LPI 轉譯快取的無效化路徑中。當核心需要清除快取條目時,它會使用 xa_for_each() 走訪 XArray 資料結構,並對每個條目呼叫 vgic_put_irq() 以釋放其引用計數。問題就出在 xa_for_each() 可能會回傳那些已經被並行操作(例如由另一個 vCPU 發出的 DISCARD ITS 指令)所清除的條目。此時,無效化迴圈仍會對那個已經被移除的條目減少引用計數,造成重複釋放,最終導致記憶體釋放後再利用 (UAF)
。
在此程式碼中曾有一個較早的漏洞 CVE-2024-26598,它部分解決了 LPI 轉譯快取命中路徑中的 UAF 問題,方法是在 vgic_its_check_cache() 釋放鎖之前先增加引用計數。然而,該修復並未涵蓋到無效化路徑,使得這個競爭條件可以透過不同的觸發序列被利用
。
上游的修補程式修改了 vgic_its_invalidate_cache() 函式,讓 vgic_put_irq() 僅對 xa_erase() 所回傳的值進行呼叫,而不是對迭代器走訪的每個條目都呼叫。修補程式的提交訊息寫道:"KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry"
。
因為 xa_erase() 會以原子操作方式移除並回傳舊的條目(若條目已不存在則回傳 NULL),此修復確保引用計數只會遞減一次,消除了重複釋放的時機窗口。該修補程式已於 2026 年 6 月上旬合入上游核心,並在約 2026 年 6 月 8 日至 10 日期間迅速被納入 6.x 穩定版系列核心
。包括 Red Hat、SUSE 與 Debian 在內的主要發行版,也已針對其支援的核心分支發布了回溯移植的修復
。
Hyunwoo Kim 於 2026 年 6 月 9 至 10 日前後,在 GitHub 上公開發布了一個可運作的攻擊程式。該存放庫包含了完整的原始程式碼、逐步重現說明,以及對利用技術的技術性描述 。此攻擊程式透過協調多個 vCPU 執行緒,使它們同時發出 DISCARD 指令與進行 LPI 轉譯快取查詢,精準地觸發記憶體釋放後再利用的狀況,從而達成宿主主機的程式碼執行。
由於可靠的概念驗證程式碼已經公開,意味著一般的漏洞掃描器與現實世界中的攻擊者,都能以最低限度的努力將此漏洞武器化,這將大幅縮短從漏洞揭露到實際攻擊活動開始之間的時間差。
若您營運多租戶的 arm64 KVM 基礎設施,例如 AWS Graviton、Ampere Altra 或任何類似平台,請將此視為需要立即反應的緊急修補週期。
Comments
0 comments