Linux vhost 快取未清除,本機使用者可提權 root、guest 可逃出 QEMU
oss-security · 2026-10-14
Linux vhost 在重設 vring 位址時沒有清掉 IOTLB 的中繼資料快取,後續存取會拿舊映射去翻譯新位址,跳過範圍檢查。這個漏洞編號 CVE-2026-74580(代號 Vghost),CVSS v3.1 基礎分數 8.8(High),可讓能開啟 /dev/vhost-* 的本機使用者取得任意核心讀寫並升為 root。
騰訊朱雀實驗室(TencentOS Security Team)於 2026-10-14 在 oss-security 公開,同時附上主線修補。
漏洞機制
vhost 用 vq->meta_iotlb[] 快取 descriptor、available、used 三個 ring 的 IOTLB 映射。VHOST_SET_VRING_ADDR 與 VHOST_SET_VRING_NUM 會換掉 vring 設定,卻沒有清空這份快取。
之後只要命中快取,就不再做範圍驗證,直接用舊映射換算新位址:
translated = old_map->addr + new_addr - old_map->start算出的指標最後交給不做檢查的 raw_copy_to_user() 或 raw_copy_from_user()。公告指出,問題出在 f88949138058(中繼資料快取)與 0210a8db2aec(延後的 GIOVA 驗證)兩個提交的交互作用。
兩條攻擊路徑
本機提權:攻擊者先設定 device IOTLB 與 vring 並送出 kick,讓快取被填入;再呼叫 VHOST_SET_VRING_ADDR 換位址,快取仍保留。把 descriptor ring 指向目標位址即可經由 IOTLB_MISS 洩漏 8 位元組,公告用它讀 IDT[0] 還原 KASLR 偏移;再把 used ring 指向執行期的 modprobe_path 寫入,最後觸發 request_module() 執行 memfd payload 而得到 uid=0。
Guest 逃逸:條件是 guest 使用 vIOMMU、iommu_platform 與 VIRTIO_F_RING_RESET。guest 先填滿 used ring 快取,再做 queue_reset 並指定新的 queue 位址,之後 used ring 的寫入會跳出 guest RAM 覆寫 QEMU heap,造成當機、QOM table 毀損,進而控制 QEMU 的 RIP。
受影響版本
公告列出各系列第一個已修補的上游 stable 版本:
5.10.265、5.15.2166.1.183、6.6.1526.12.104、6.18.457.1.9、7.2
公告也註明,廠商核心可能 backport 修補而保留較舊的基底版本號,所以不能只比對版本字串。
作者以同一份 x86-64 exploit 在下列環境完整重現本機提權:
| 發行版 | 核心 | /dev/vhost-vsock 權限 |
|---|---|---|
| Ubuntu 26.04 LTS | 7.0.0-28-generic | 0660 root:kvm |
| RHEL 9.8 | 5.14.0-687.5.3.el9_8 | 0666 |
| Amazon Linux 2023 | 6.1.180-225.360.amzn2023 | 0666 |
| Azure Linux 3.0 | 6.6.150.1-1.azl3 | 0666 |
| Oracle Linux 10.2 | 6.12.0-204.92.4.2.el10uek | 0666 |
差別在於後四者的裝置節點是 0666,任何一般使用者都能打到;Ubuntu 預設 0660 root:kvm,需要先是 kvm 群組成員。
對誰有影響
跑虛擬化的主機(QEMU/KVM 搭配 vhost-net、vhost-vsock、vhost-scsi、vhost-vdpa)風險最高。把 vhost 裝置掛進容器的環境也一樣,因為容器內的使用者就等於能開啟裝置的本機使用者。使用 vIOMMU 並對不受信任 guest 開 iommu_platform 的主機,還要擔心 guest 觸發的逃逸路徑。
修補與緩解
上游修補在 vhost_vring_set_num_addr() 中重設 vring 中繼資料快取,使重新設定的位址再次走 IOTLB 驗證。修補後要重開機進入新核心才生效。
無法立刻更新時,公告建議:
- 限制所有 vhost 裝置節點的存取,含
/dev/vhost-net、/dev/vhost-vsock、/dev/vhost-scsi、/dev/vhost-vdpa-*。 - 不要把這些節點交給不受信任的容器,並把
kvm這類擁有裝置的群組視為特權群組。 - 未修補的虛擬化主機,避免對不受信任 guest 暴露 vIOMMU 後的
iommu_platformvhost 裝置。
要注意,改權限不會撤銷已開啟的 file descriptor,也無法處理 guest 觸發的路徑。
公告另提到,這次的原始碼分析、重現與 exploit 開發由 Corvus AI 輔助;公告未說明是否已有野外利用。