GITS_CTLREnableLPIs尽管虚拟机逃逸十分罕见,但它们是最危险的虚拟化漏洞类别,因为此类漏洞会打破云计算所依赖的隔离边界。此前公开的KVM逃逸主要针对x86架构,通常通过QEMU或AMD特定代码实现。而ITScape是首个证明可在无需用户态模拟器漏洞的情况下,直接通过内核态KVM代码本身从无特权的arm64客户机中逃逸的有效利用程序
。
对于运行Graviton、Ampere Altra或任何采用arm64 KVM且有多租户工作负载的云服务商而言,一台客户机可以:
漏洞代码位于LPI翻译缓存失效路径中。当内核需要刷新缓存条目时,会使用xa_for_each()遍历XArray,并调用vgic_put_irq()来释放每个条目的引用计数。问题在于,xa_for_each()返回的条目可能已被并发操作(如另一个虚拟CPU发出的DISCARD ITS命令)所擦除。而失效循环仍然会对那个已被移除的条目释放引用,造成一次额外的引用释放,并最终导致释放后使用。
在此前,同一段代码中曾存在一个类似漏洞CVE-2024-26598,该漏洞通过让vgic_its_check_cache()在释放锁之前提升引用计数,部分修复了LPI翻译缓存命中路径中的释放后使用问题。然而,该修复并未覆盖到失效路径,使得此竞争条件可以通过另一个触发序列被利用。
上游修复修改了vgic_its_invalidate_cache(),使得vgic_put_irq()仅在xa_erase()返回的值上调用,而非对迭代器接触的每个条目都进行调用。其补丁提交信息写道:“KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry”。
由于xa_erase()会原子性地移除并返回旧条目——若条目已被移除则返回NULL——此修复确保了引用计数恰好递减一次,从而消除了双重释放的窗口。该补丁已于2026年6月上旬进入上游内核,并在2026年6月8日至10日左右被迅速合入6.x稳定版系列。包括Red Hat、SUSE、Debian在内的主要发行版也已为其支持的各个内核分支发布了修复补丁
。
Hyunwoo Kim于2026年6月9日至10日左右在GitHub上公开发布了一个有效的攻击程序。该代码仓库包含完整的源代码、逐步复现说明以及利用技术的详细描述。该攻击通过协调多个虚拟CPU线程,同时发出DISCARD命令和进行LPI翻译缓存查找,从而精确触发释放后使用漏洞,最终实现在宿主机上执行代码。
一个可靠的PoC已公开可用,这意味着自动化漏洞扫描器和现实世界中的攻击者可以毫不费力地武器化此漏洞,大大缩短了从漏洞披露到实际攻击发生之间的时间窗口。
如果您运营着多租户的arm64 KVM基础设施——如AWS Graviton、Ampere Altra或任何类似平台——请将此事视为紧急补丁周期。
Comments
0 comments