最近披露的信息显示,一个漏洞会使云服务器面临风险。该漏洞允许攻击者完全控制物理服务器,这对云基础设施提供商来说无疑是一场噩梦。
Zapscape(编号为 CVE-2026-64561)是 Linux KVM 虚拟机管理程序中的一个严重漏洞,它暴露了许多平台在启用嵌套虚拟化时无意中承担的风险。该漏洞允许拥有虚拟机内核权限(L1)的攻击者在宿主机系统(L0)上以 root 权限执行代码,从而破坏虚拟化环境的隔离性。
Zapscape被认为是一种高影响威胁,它不仅能够帮助用户逃离虚拟机,而且还为对 /dev/kvm 设备具有写入权限的主机用户打开了一条本地权限提升途径。
尽管像 Red Hat 这样的组织已将该漏洞的 CVSS 评分评为 7.0,主要关注其不稳定性及拒绝服务,但公开的概念验证 (PoC)表明,该漏洞的破坏性更大:直接在主机根目录中创建任意文件。
内存管理单元混乱
Zapscape 的运行机制隐藏在 KVM 的内存管理单元 (MMU) 中,具体来说,就是当一个客户机 (L1) 作为另一个子客户机 (L2) 的管理程序时,虚拟机管理程序如何处理页表。问题在于缺页错误处理过程中的逻辑顺序错误。在内核代码路径中,“过时根目录”的检查被错误地执行在了页面检索函数之前,而不是之后。
这种错误的顺序会触发典型的释放后使用(use-after-free)场景。在恢复过程中,KVM 可以移除它正在使用的根目录并将其标记为无效。然而,由于健康检查已经运行,系统会继续在已失效的根目录下构建映射。有趣的是,这个排序问题早在 2008 年就已存在于代码中,但在 2020 年 7 月 Linux 内核 5.9 发布后才变得严重且可被利用,因为当时引入的一条指令系统不再强制执行。
要求和限制
要利用 Zapscape 漏洞,环境必须满足非常具体的要求。首先,KVM 模块中必须启用嵌套虚拟化,这种配置允许使用三层架构(L0、L1 和 L2)。攻击者需要从 L1 层发起攻击,这需要拥有该虚拟机的 root 权限。攻击者随后操纵内存模式,同时 L2 子虚拟机的活动会迫使 L0 主机发起配额页检索,从而导致内存损坏。
在硬件层面,具体情况因制造商而异。在使用嵌套页表(SVM)的AMD系统中,该漏洞较为简单,无需任何额外功能。相反,在Intel处理器上,该漏洞需要L1客户机暴露四层或五层EPT页遍历能力。这使得针对Intel的攻击仅限于较新的架构,特别是Ice Lake-SP系列及之后的架构。
值得注意的是,虽然公开的概念验证已成功在受控环境中逃逸到主机,但安全研究人员报告称,在某些重新编译的内核上,该漏洞利用只会使攻击者的虚拟机崩溃,从而造成拒绝服务攻击,而不是完全逃逸。
缓解措施、修补和策略
针对 Zapscape 的最终解决方案已于去年 7 月发布到 Linux 软件仓库,其中包含一个修正验证顺序的补丁。该补丁将过期根目录检查移至MMU 页面分配之后执行,从而确保虚拟机管理程序不会在已删除的根目录下创建活动映射。这些修复程序已在稳定内核分支中实现,并已被多个发行版广泛采用。
对于无法立即升级的管理员,存在一些高效的临时缓解措施。首要措施是禁用所有非必要服务器上的嵌套虚拟化,方法是在 modprobe 配置文件中向 `kvm_amd` 或 `kvm_intel` 模块传递 `nested=0` 参数。此措施需要重新加载模块,这意味着需要停止所有正在运行的虚拟机。
最后,如果您有兴趣了解更多信息,可以点击以下链接查看详情。