Linux的vhost子系统中的一个漏洞允许本地用户随意读取和写入内核内存,并在近十年的内核版本中获得root权限。在一种虚拟化设置中,它允许不受信任的虚拟机写入主机的内存并劫持运行虚拟机的程序。
该漏洞被追踪为CVE-2026-74580,命名为Vghost。发现该漏洞的腾讯朱雀实验室于8月3日发布了修复程序,并于10月12日发布了完整的写作,展示了两种攻击的有效演示。目前没有公开迹象表明该漏洞已被利用。
vhost是Linux内核的一部分,用于加速虚拟机和容器的网络及其他输入/输出。当地用户通过打开设备节点访问它,通常是/dev/vhost-net或/dev/vhost-vsock。
在主机上,该漏洞为未授权用户提供了一种可靠的方法来读取和写入任何内核地址,绕过KASLR并升级到root。攻击是确定性的:它不需要内存整理和幸运的时机。
第二种攻击较为狭窄。当虚拟机的virtio设备放置在启用了iommu_platform的虚拟IOMMU后,并且vhost在设备-IOTLB模式下运行时,不受信任的来宾可以触发相同的漏洞,使主机内核越界写入主机的QEMU进程。从那里,来宾可以覆盖QEMU中的函数指针,并控制主机进程接下来运行的位置,或使其崩溃。
工作原理
vhost保持每个虚拟环和它用于移动数据的共享队列后面的内存映射的小缓存。缓存命中被视为该区域已被检查的证明。当映射被更新或失效以及队列被重置时,缓存会被清除,但在队列活动时,VHOST_SET_VRING_ADDR或VHOST_SET_VRING_NUM命令更改环的地址或大小时不会清除。
附加设备IOTLB时,这些命令在不检查新地址的情况下接受新地址,将该检查留到后面。一旦缓存被填满,后续的检查就不会运行,vhost继续使用旧映射翻译新地址。然后,内核在没有边界检查的情况下将数据复制到或从该指针,因此对使用环的写入或对描述符的读取会落在映射区域之外。这使攻击者能够进行内核读取和写入。
该漏洞在代码中存在了大约九年,因为它需要两个合理的更改来创建。2017年的更改(Linux 4.11)添加了缓存及其快捷方式。2020年的更改(Linux 5.9)将地址检查移出命令并转移到后续步骤,移除了原本会捕获过时翻译的检查。
受影响的对象及应对措施
该漏洞影响从4.11到7.2-rc4的Linux内核。腾讯在五个发行版内核上重现了完整的本地用户到root的链:Ubuntu 26.04、RHEL 9.8、Amazon Linux 2023、Microsoft Azure Linux 3.0和Oracle Linux 10.2。在Ubuntu上,设备节点仅限于kvm组,因此起点是该组的成员,而不是任何用户。
在其他四个测试镜像上,该节点的权限为0666,任何本地用户都可以访问。
修复程序(提交de845981da67)在每次重新配置环时清除缓存。安装包含该修复的内核并重启。以下是首批修复的上游稳定版本;供应商也可以在不更改版本号的情况下回溯修复。
稳定分支
首个修复版本
5.10.y
5.10.265
5.15.y
5.15.216
6.1.y
6.1.183
6.6.y
6.6.152
6.12.y
6.12.104
6.18.y
6.18.45
7.1.y
7.1.9
7.2
7.2
红帽、Amazon Linux和Oracle Linux已发布修复。Ubuntu已修复22.04,并且截至10月13日,仍将其24.04和26.04内核列为进行中。
在修复内核到位之前,限制对vhost设备节点的访问。移除对/dev/vhost-net和/dev/vhost-vsock的全局访问,将拥有组限制为受信任的虚拟化服务,并在易受攻击的内核运行时将该组的成员资格视为特权。
对于来宾到主机的逃逸,没有临时解决方法;对于该路径,修补的内核是唯一的补救措施。
严重性及AI发现者
该漏洞被评为高危,而非危急,评估者对其严重性存在分歧。kernel.org CVE团队将其评分为8.8,并标记其范围为已更改,因为来宾到主机的写入到达主机的QEMU进程中的内存,并跨越了来宾与主机之间的边界。
红帽将其评分为7.3,并标记范围为未更改,认为影响仍在主机自己的信任边界内;它还将完整性影响评为较低。亚马逊评分为7.8,Oracle为7.3。
该漏洞是在腾讯为内核漏洞研究构建的多代理系统Corvus AI的帮助下发现的。上游修复在致谢行中提及了它,腾讯表示该管道发现了该漏洞。
这是一项机器辅助研究,而不是AI进行的攻击。它与8月份披露的一个已有18年历史的SCTP内核漏洞的团队和管道相同,该漏洞也达到了root权限,并在测试中逃逸了容器。
觉得这篇文章有趣吗?请在Google News、Twitter和LinkedIn上关注我们,阅读更多我们发布的独家内容。