資安雷達 2026 年 10 月 15 日

2026-10-15 — Linux vhost 快取未清除,本機可提權、guest 可逃逸

primary=https://www.openwall.com/lists/oss-security/2026/10/14/2 primary=https://git.kernel.org/linus/de845981da67a6b049080c87e605130b0c30adc5

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.216
  • 6.1.183、6.6.152
  • 6.12.104、6.18.45
  • 7.1.9、7.2

公告也註明,廠商核心可能 backport 修補而保留較舊的基底版本號,所以不能只比對版本字串。

作者以同一份 x86-64 exploit 在下列環境完整重現本機提權:

發行版核心/dev/vhost-vsock 權限
Ubuntu 26.04 LTS7.0.0-28-generic0660 root:kvm
RHEL 9.85.14.0-687.5.3.el9_80666
Amazon Linux 20236.1.180-225.360.amzn20230666
Azure Linux 3.06.6.150.1-1.azl30666
Oracle Linux 10.26.12.0-204.92.4.2.el10uek0666

差別在於後四者的裝置節點是 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_platform vhost 裝置。

要注意,改權限不會撤銷已開啟的 file descriptor,也無法處理 guest 觸發的路徑。

公告另提到,這次的原始碼分析、重現與 exploit 開發由 Corvus AI 輔助;公告未說明是否已有野外利用。

原始來源:oss-security 公告、主線修補 commit


End of article
0
Would love your thoughts, please comment.x
()
x