這是一次關於 Linux KVM 虛擬化層的嚴重安全性漏洞分析。這個被命名為 Januscape(CVE-2026-53359)的漏洞潛伏在 Linux 核心中長達 16 年,其危險之處在於它允許攻擊者從虛擬機(Guest VM)內部「逃逸」到宿主機(Host),直接影響運行該虛擬機的物理伺服器。
理解漏洞背景:KVM 與 Shadow MMU
在深入漏洞之前,我們需要理解 KVM 如何管理記憶體。KVM 是 Linux 核心的一個模組,將 Linux 轉變為 Hypervisor(虛擬機管理程序)。
虛擬機需要自己的記憶體分頁表(Page Tables)來管理記憶體,而宿主機必須追蹤這些分頁。在現代 CPU 中,我們通常使用硬體加速技術,如 Intel 的 EPT 或 AMD 的 NPT。然而,當我們開啟「巢狀虛擬化」(Nested Virtualization,即在虛擬機裡面再跑虛擬機)時,KVM 必須回退到一種較舊的軟體模擬機制,稱為 Shadow MMU(影子記憶體管理單元)。
Shadow MMU 的作用是建立一份宿主機維護的副本,用來鏡像虛擬機的記憶體佈局。Januscape 漏洞就發生在這個 Shadow MMU 的程式碼中。
漏洞核心:Use-After-Free 與類型混淆
Januscape 是一個典型的 Use-After-Free(釋後使用)漏洞。簡單來說,當 KVM 需要一個追蹤分頁時,它會嘗試尋找現有的分頁來重複使用,以提高效率。
問題出在 KVM 在尋找可用分頁時,僅根據記憶體地址(Memory Address)來比對,而忽略了該分頁的「角色類型」(Role)。在 KVM 中,兩種不同功能的追蹤分頁可能會共享同一個地址,但它們的用途完全不同。
當 KVM 錯誤地將一個 A 類型的分頁當作 B 類型來使用時,就會導致內部記錄混亂。這種狀態會造成兩種後果:
第一種是導致宿主機崩潰(Host Panic)。這是目前公開的 PoC(概念驗證)所展現的結果。攻擊者可以讓整個物理伺服器當機,導致該機上所有其他租戶的虛擬機全部癱瘓,造成嚴重的拒絕服務攻擊(DoS)。
第二種是更危險的權限提升。如果被釋放的分頁在核心清理之前被重新分配給其他用途,攻擊者可以利用這個時間差,在宿主機記憶體中寫入特定數值。雖然攻擊者不能完全控制寫入的內容,但透過精巧的記憶體佈局,這足以讓攻擊者在宿主機上執行任意程式碼,並獲取 root 最高權限。
攻擊路徑與影響範圍
要觸發這個漏洞,攻擊者需要滿足兩個條件: 在虛擬機內部擁有 root 權限(對於租用雲端實例的用戶來說,這通常是預設狀態)。 宿主機必須開啟巢狀虛擬化(Nested Virtualization)。
這意味著,如果你的伺服器僅運行普通的虛擬機且未開啟巢狀虛擬化,則不受此漏洞影響。但對於提供高級虛擬化服務的雲端供應商,這是一個極高風險的漏洞。
值得注意的是,這個漏洞在 Intel 和 AMD 的 x86 系統上表現一致,因為它存在於兩者共用的 Shadow MMU 邏輯中。此外,如果宿主機的 /dev/kvm 裝置權限設定過寬(如 RHEL 等分發版),本地普通用戶甚至可以直接利用此漏洞提升至 root 權限。
如何修復與防禦
開發團隊已經發布了修復補丁。修復方式非常簡單:在 kvm_mmu_get_child_sp() 函數中增加一行檢查,要求在重複使用分頁時,不僅要比對地址,還必須確認 role.word(角色類型)完全一致。
對於系統管理員的建議: 更新核心:檢查 Linux 核心版本是否已包含 commit 81ccda30b8e8。請參考各分發版的變更日誌,不要僅依賴 uname -r 版本號。 暫時緩解措施:如果無法立即更新,請關閉巢狀虛擬化功能。在啟動參數中設定 kvm_intel.nested=0 或 kvm_amd.nested=0 即可切斷攻擊路徑。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。