Januscape 漏洞分析:KVM 虚拟机逃逸与 16 年潜伏

漏洞概述

安全研究员 Hyunwoo Kim(@v4bel)公开了 Januscape(CVE-2026-53359),一个 KVM/x86 虚拟机逃逸漏洞。根据公开信息,这是已知首个能同时在 Intel 和 AMD 平台上触发的客户机到宿主机(guest-to-host)逃逸漏洞。

Januscape

漏洞存在于 KVM/x86 的 shadow MMU(影子内存管理单元)模拟层中,是一个 use-after-free 缺陷。攻击者在虚拟机内部执行操作即可破坏宿主机内核的 shadow page,直接威胁虚拟机与宿主机之间的隔离边界。

该漏洞影响范围从 2010 年 8 月(commit 2032a93d66fa)到 2026 年 6 月修复(commit 81ccda30b4e8),在 Linux 内核中潜伏约 16 年。期间被作为 0-day 用于 Google kvmCTF 比赛。

漏洞技术原理

Shadow MMU 与 use-after-free

KVM 在使用硬件辅助虚拟化(Intel VT-x / AMD-V)时,需要维护一层影子页表(shadow page table),将客户机的虚拟地址映射到宿主机的物理地址。这套机制由内核态的 shadow MMU 代码管理。

Januscape 漏洞的核心在于 shadow MMU 在处理页表操作时存在 use-after-free:某个 shadow page 结构在仍被引用时被释放,攻击者通过精心构造的客户机侧操作可以触发对该已释放内存的访问,从而破坏宿主机内核的内存完整性。

与 QEMU 无关

一个关键特征:该漏洞发生在内核态 KVM 中,与 QEMU 的用户态设备模拟无关。这意味着即使云服务商使用自研的虚拟化栈替代 QEMU,只要底层使用内核态 KVM,同样受影响。这扩大了影响范围,大型公有云(GCP、AWS 等)的自有虚拟化方案也无法幸免。

Intel 与 AMD 双平台

此前公开的 KVM 逃逸漏洞通常只针对单一架构(仅 Intel 或仅 AMD)。Januscape 的触发路径依赖 shadow MMU 这层架构无关的通用代码,因此能在两个平台上同时触发。

影响评估

该漏洞有两个维度的实际威胁:

1. KVM 逃逸(云安全)

攻击者只需在公有云上租用一台虚拟机,利用客户机内部操作即可攻击宿主机内核:

  • DoS:触发宿主机内核 panic,导致同一物理机上所有租户虚拟机宕机
  • RCE:在宿主机上以 root 权限执行代码,控制宿主机及其上所有虚拟机

前提条件是宿主机开启了嵌套虚拟化(nested virtualization),且攻击者在虚拟机内拥有 root 权限(加载内核模块所需)。在公有云场景下,用户通常拥有自己虚拟机的 root 权限,前提天然满足。

2. 本地提权(LPE)

在 RHEL 等发行版中,/dev/kvm 设备权限为 0666(所有用户可读写),普通本地用户可以利用该漏洞提权至 root。

不受影响的场景

  • arm64 架构:该漏洞仅在 Intel 和 AMD 上触发
  • 未开启嵌套虚拟化的单租户 KVM:攻击面较小
  • 但需注意:如果 arm64 系统尚未修补此前的 ITScape(CVE-2026-46316) 漏洞,arm64 的 KVM 主机仍有风险

PoC 分析

漏洞的 PoC 代码已公开在 GitHub(V4bel/Januscape),包含一个内核模块 poc.c

使用方法

在虚拟机内部安装内核头文件并编译:

bash
sudo apt-get install -y build-essential linux-headers-$(uname -r)
make

加载模块(需先卸载 KVM 模块):

bash
# Intel 平台
sudo rmmod kvm_intel
sudo insmod poc.ko

# AMD 平台
sudo rmmod kvm_amd
sudo insmod poc.ko amd=1

模块加载后,宿主机 KVM 在几秒到几分钟内触发内核 panic:

kernel BUG at arch/x86/kvm/mmu/mmu.c (pte_list_remove)
Comm: qemu-kvm

作者表示完整的逃逸 exploit 也已实现,暂时不公开,计划在未来放出。PoC 运行需要客户机 root 权限,在无 root 场景下需配合 LPE 漏洞(如 Dirty Frag)链式使用。

修复方案

修复 commit 为 81ccda30b4e8(2026 年 6 月合并入主线)。

检查方法

bash
# 查看当前内核版本
uname -r

# 检查补丁是否已包含(如果内核版本 ≥ 包含该 commit 的版本)
# RHEL/CentOS 用户检查:
rpm -qa kernel

行动建议

场景行动
多租户 x86 KVM 宿主机 + 嵌套虚拟化立即升级内核至含 81ccda30b4e8 的版本
单租户 KVM 开发环境尽快升级,风险较低但不为零
arm64 KVM 宿主机不受 Januscape 影响,但检查 ITScape(CVE-2026-46316)补丁
公有云用户无法自行修补,关注云厂商安全公告

漏洞时间线

  • 2010-08-01:引入漏洞的 commit 2032a93d66fa 合并入 Linux 内核
  • 漏洞存在期间:被用作 Google kvmCTF 0-day
  • 报告:通过 [email protected] 报告
  • 2026-06-16:修复 commit 81ccda30b4e8 合并入主线
  • 禁运期满:exploit 发至 oss-security,文档和 PoC 公开

相关漏洞

同一研究员还公开了 ITScape(CVE-2026-46316),一个 arm64 KVM 逃逸漏洞。两个漏洞分别覆盖 x86 和 arm64 架构,组合起来对 KVM 生态构成全面威胁。此外还有 Dirty Frag LPE 漏洞,可用于在无客户机 root 权限的场景下与 Januscape 链式利用。


来源:GitHub V4bel/Januscape · CVE-2026-53359