
本文档描述了由 Hyunwoo Kim (@v4bel) 报告并修复的 ITScape (CVE-2026-46316) 漏洞。这是一个 KVM 逃逸漏洞,允许虚拟机在 KVM/arm64 环境中逃逸到宿主机,并以内核(root)权限在宿主机上执行命令。据公开所知,这是首个针对 KVM/arm64 的虚拟机逃逸到宿主机的利用研究。
ITScape 利用的是 KVM/arm64 的 vGIC-ITS(中断翻译服务) 模拟中的竞态条件。它仅通过客户机侧的操作触发该漏洞,从而逃逸到宿主机,并且可能威胁到接受非受信任客户机的 KVM/arm64 宿主机(特别是多租户 arm64 公有云)的客户机-宿主机隔离性。
与常见的 QEMU 逃逸不同,该漏洞位于内核内的 KVM 而非 QEMU 用户空间,因此独立于 QEMU 的模拟工作,并且可以以宿主机内核权限(而非用户进程如 QEMU 的权限)在宿主机上执行命令。
有关详细技术信息,请参阅此处。
[!NOTE] 在将此漏洞报告给 [email protected] 后,约定的保密期已结束,因此本 ITScape 文档现已发布。有关披露时间线,请参阅技术细节文档。
为了安全测试,建议在 QEMU TCG 下运行 PoC。(触发漏洞与 QEMU 无关。)在 QEMU TCG 下运行时,PoC 具有以下结构。
QEMU TCG: 模拟 arm64 CPU(包括 EL2),因此 arm64 内核作为 KVM 宿主机运行
└─ arm64 宿主机内核: KVM 宿主机和逃逸目标
└─ poc: 打开宿主机的 /dev/kvm 并创建一个客户机 VM "G" (uid=1000)
└─ 1. G 的客户机代码(由 poc 通过 KVM_RUN 运行)执行 GIC/ITS MMIO
2. 陷入宿主机的内核内 KVM -> double-put -> 宿主机内核代码执行
此 PoC 并非一个可在 arm64 云环境中立即运行的完全武器化利用程序,而是基于 kvm 自测试复现漏洞及完整利用链的演示代码。了解目标云虚拟化栈实现的攻击者会发现向武器化过渡本身并不困难,但需要将自测试的宿主机侧直接构造移植到真实的客户机驱动路径,并根据目标内核版本和配置调整地址、gadget、偏移量、竞争时间等。存在已武器化的实际利用程序,但未公开发布。
# ./build.sh <linux>/tools/testing/selftests/kvm
# ./qemu.sh <kernel-image> <initramfs>
# ./poc
...
[+] /ITScape created by the host kernel (owner uid=0). verify: ls -la /ITScape
# ls -la /ITScape
-rw-r--r-- 1 0 0 0 Jun 9 00:02 /ITScape
此 PoC 旨在提供准确信息。请勿在未经授权的系统上使用。
ITScape (CVE-2026-46316) 影响的范围从 8201d1028caa (2024-04-25) 到 13031fb6b835 (2026-06-05)。
如果您运营一个接受多租户客户机的 arm64 KVM 宿主机,或使用基于此类宿主机上的实例,请检查宿主机内核是否已应用 13031fb6b835 补丁(运营者直接检查,租户通过其提供商检查)。此外,由于这是一个新的漏洞类别,预计会出现更多变体和后续漏洞,请保持关注。也就是说,您需要区分后续漏洞是否真的仅靠客户机操作即可触发(无需宿主机侧操作),以及是否真的可利用。
不影响。该漏洞位于 arch/arm64/kvm/vgic/ 中。如果您不在 arm64 KVM 宿主机上,则无需担心此漏洞。
是的。驱动 GIC/ITS MMIO 需要客户机内核(EL1)权限。当您在公有云上分配到实例时,通常对您自己的 VM 拥有 root 权限,因此满足条件。在没有客户机 root 的情况下,它必须与如 Dirty Frag 这样的本地提权漏洞链式利用。