Januscape KVM/x86 Shadow MMU 中的角色混淆問題
发布于 2026-07-08 21:15:47(微信公众号导出记录)。
本文来自公众号后台的“导出文章内容”功能。博客正文由导出长图进行本地 OCR 转写,并保留原始排版图用于逐段核对。
原文链接:查看原文
OCR 转写有效文字约 7760 字;代码、流程图和版式以文末原始排版图为准。
正文(本地 OCR 转写)
original wex7ce EI V1ajero 2026年7月8日 21:16 M土 2026年7月。安全研究員Hyunwoo Kim(@v4bel)公披露了 Januscape,漏洞编领為 CVE-2826 -53359,
intel. AMDA
Januscape
这是一影善 L1nuX KVM/x86 的虚凝化隔漏润,核心虑随出现在 KVM shadow MMU 對
shadow page 的框用谨中。公專 V4bel/Januscape 提供了可宿主機溃的 PoC
專案地址:
https://github. com/V4bel/Januscape
研究者表示,完整guest-to-host escape 在受控瑞境中可實现,但完整利用程式码亚末公删。
公 PoC 主要展示的是微 guest 像婚替 host kernel panic 的 DoS 路得.
一句括概括:
版 KVM 在用 shadow page 只比鞭 gfn,没有比较rale。攻繁者可以在 nested virtualization 增景中截造同一個 gfn、不同role的 shadow pege ,舒辱 KVM 錯娱拖用,最终硬瑰rmap 起限效解 use-after-free.
1.漏洞定位
Januscape 不是QEMU 便用看漏词,也不是 Proxmox 或 OpenStack 控制面漏润L 它位於 Linux kernel KVM xB6 MMU 理式疆中,主要涉及: arch/x86/kvm/mu/mnu c 复制 受影馨的是使用 Linux KVM的 x86 塞主機,包括 Intel VMX/EPT 與 AMD SVM/NPT 環境。 风缴最高的場景包括:
-
x86 Linux KVN 宿主膜:
-
多租乒或不可信quest;
-
guest 暴累 nested virtualization:
-
guest 内攻者可取得root 或可入 kernel module;
-
或主概本地续用者可存取/cev/kvn。
Januscape 只針對 xB6 KVML arm64 不受 CVE 影据,但 @v4bel 此前披露的 ITScape /
CVE-2826-46316 是另—個 KVM/arm64 guest-to-host escape, 需要强虑理,
ITScape 再炎:
https://github. com/V4bel/ITScape
2.相關研究派絡
Januscape 丽於 HyunwooKin(@v4bel)近期 Linux kernel高值值攻墅面研究的一部分。 同一系列中還包括:
-
Dirty Frag: Linux 本地提標端润辑,主要面向 LPE.
-
ITScape / CVE-2626-46316: KVM/arm64 guest-to-host escape,
-
Januscape / CVE-2026-53359: KVM/x86 guest-to-host escape, 窖 Intel
AMDxB6 KVM 增景。 V4bel G Anyway this wraps up my cute tux series. The face is especially funny. isn't it?lol Dirty Frag: Universal Linux LPE
- Januscape: The first Guest-to-Host Escape in KVM/x86 && Google
kvmCTF O-day exploit
ITScape Dirty Frag Januscape 出人工智量(A)生会 上午12:03·2026年7月7日·1.787文查看
三者不是同一回漏润。但都图编 Linux kernel 高风险攻黎面展限
Dtity Frag LInux LPE KVM/a/ms @vibel / Hyur rTScape Guest-to-host escape KVM/x86 Intel VMX + AMO SVM
Dirty Frag 專系:
https://github.con/v4bel/dirtyfrag
Dirty Frag
3.個關鍵概念
3.1GFN是什
gfn 是 Guest Frane Number,也就是 guest 物理真然。 GFN = GPA >> 12 复制 其中 GPA 是 Guest PhysicalAddress.可以肇理解為: GPA:guest 為的物理地址 GFN:guest 物理记境中的策照票 复制 例如: GPA = 8x12345886 CCZ[x6 = NH5 复制 KVN 舍用gfn 曾理 guest 记增智映射、menslot、rnap 和 shadow page 之間的酮係, 所以gfn回著的是: 速是quest 物冠记慷暗径的一真? 复制
3.2Role是什
role是KVM 給 shadow page 記绿的語囊调讯。它摧述遗一真 shadow page 目前扮演什 角色1 创如:
-
是 direct page 董是 1ndirect page;
-
的硬一级页表:
-
封愿什座存取權限;
-
是否服尬 nested EPT/NPT;
是否束白 huge page 拆分;
- 属铃殖 MMU context。
Januscape 中最调健的是role.direct: direct =1:直胰射或拆分 huge page 使用 direct -0: shadou guest 控制的页表页 复制 可以遗标理解: gfn表示“是一页」 rale表示“速页硬KVM成什鹿用: 复制 这雨個噪位必须同時匹配,shadowpage才能安全拖用。
4.ShadowMMU為什會参與
答通虚提链地址标独大致是: Guest Virtual Address
- > fuest Page Tahle
Guest Physical Address LdN/Ld3 <- Host Physical Address 复制 InteL 的二脑段地址梅换叫 EPT,AMD 叫 NPT。现代 CPU 提供硬體助。所以普通VM 增景 下,很多路径不需要傅统 shadow pag1ng. 但 nested virtual1zation 鲁改盛速国情况 LB:真置宿主截,执行KVM L1: 攻量者控制的 guest L2: L1 内部破勤的底套 guest 复制 L1 作為虚化宿主:言為L2 精造自己的 EPT/NPT。LBKVM 需要把 L1 提供的碳套页 L0 Host Linux KVM L1 Giuest Attacker-controlled VM L2 Nested Guest L1 buflds EPT/NPT for LZ L0 KVM shadows nested EPT/NPT Shadow MMU vulnerable path 表聘换成自己可积行的结,请會进人 KVM shadow MMU路径 Januscape 正是针 nested virtualization 下的 shadow MMU 感理温辑
5.根因:只比较gfn,没有比较role
漏润核心可以整缩成一句括: 崔KWM 在福用 child shadou page 时,只检查 gfn 是否相同,没有检查 role 是否相员L 复制 周题在龄:同一個gfn 可能在不同路径下需要不同 role 的 shadow page. 例如: 同 gfn 6 路握 B: 需要 di rect=o 的 shadov page 复制 要逗相看到gfn相同,就為可以袍用,但實除上它們悟希不同。不能袍用。 正确退辑原旅是: chi1d->gfn gfn 亚且 chiLd->role,word 复制 修復捕丁正是增加了role比较。
Januscape 的键就是该售通期在gfn 匹配後提的慎用,忽路了rale差。
6.Directpage奥indirectpage的差
6.1 Direct page
4KB entry. 这情况下。KVM 可以娘性計算每图entry 對愿的 gfn: entry_gfn = sp->gfn + index 复制
6.2 Indirect page
indirect page 用束 shadow guest 控制的页表页。每個 entry 指向哪图 gfn,要看 guest 页表内容,不能量用sp-gt:gfn+index推薄。 所以雨者的核心差晃是: direct page: indirect page: gfn由 guest 真表内容次定 复制 如果KVM把 direct page 错误用到indirect 場景,後安装和量除映射時就可能使用雨套 不同的 gfn 源辑。 这正是rmap 损壤的前提。
7.rmap為什會損壤
KVN 使用 rmap.也就是 reverse mapping,記操: 某留 gfn 被娜些 shadow page table entry 陕射 复制 正常流程是: 安 SPTE -> 加入 rmap[gfn 0] 复制 漏润解發後言成: 安装時:按 indirect 强记到rmep[gfn 0] 删除時:技 di.rect 巡辑针算成 gfn X,再去mapgfn X]删陆 复制 能果是: rnaplgfn Q] 中硬留了医 SPTE 捕标 但速倡 SPTE 所在 shadow page 之德可能已提轻殖 复制 道就形成 stale pointer。後KVM 再匿rmap 時,可能存取已释放的 shadow page,產 生 use-after-free. KVM Addl SPTE. to rma gfn Q] ve SPTE
- gfn X
ap[gfn X] rmao[gfn Q] stl c ip[efn Q] stal c Shati pege freed Stale polnter to freed page Stale p KVM 公众 EIVlajero Fage 公PoC主要利用條路幅壁KVH瓷科结磺一致性检查失致,最终填致host panic.
8.Januscape專案程式碼做了什
Januscape 專案地址:
https://github. con//4bel/Januscape
專案结精很小:
REAOPEnd
Makefile
poc.c
assets/write
复制
核心榴案是por.c,它是一 Linux kernel module PoC,
程式碼主要做四件事。
8.1造嵌套虚凝化環境
PoC 在 L1 guest 内部直接使用vMIX/SVM 拾令一国小的 L2 guest。 專案同时支援: Intel wx/EPT AMD SVM/NPT 复制 程式碼中适通一層virt_ap5抽象,把Intel和AMD 的差冕封装起来。遭说明漏润本身不是某 CPU 廠商單藏的周盟,而是 KVM xB6共用 shadow MMU 遥辑的周题。
8.2造特殊真表布局
PoC 精造特殊的 nested EPT/NPT 真表。爆同一 guest physical page 在不同特脚贴既像 huge page, 又像 page table page, 这一步的目标是製造: uy6 图 不同role 复制 也就是漏润斓發所需的圆健修件。
8.3多執行打競態
PoC理有雨频核心鞅行: writer 较行铺: 不继切换基倍 PDE 的 hugc/table 肽辖 faulter 轨行: 反覆铁行 L2, 聚宿主機 KVM 温入 shadou MU fault 路得 复制 这不是普通意上的多积行储加速」,而是为了摘大就参窗口,KVM更容易在错误時间黏用错 role 的 shadow page. faulter threads Toggle PDE Run L2 guest repeatedly Trieger nested EPT/NPT table page entry Fuqua a8ed a8nj fault oed mopeys (2aup eed mopeys 02evp Enter LO KVM shadow MWU Same gfn, different role Old KV may g
8.4筋發宿主機KVM崩潢
如果目標宿主碳末修復,KVH 可能探拖用 shadow page,最终在pte_Llst_renove等路得解 髮 kernel BUG, 公需效果是: guest 内缺行 PoC -> host KVM panic / Do5 复制 这不是 Windows 程式,也不是苦通 C康用,它需要在 Linux guest 中缤耀成kernel moduLe,且目標宿主機需要满足漏润解發修件。 本文不展開PoC的转行步霖,故程式碼會影暨富主概稳定性,不愿在未授環境中韩行。
9.漏洞路完整梳理
Januscape 的错疑可以概括為:
公用PoC最能打到的是Do5 路理。完整guest-to-host rnot expleit 需要把 UAF 原细造一步聊化定的 雾主燥 kernel 控材,值部分浸有公限。 10,可以達到什效果 公测惠案可以还到的主要效果是: 炭 guest 内部瓣禁主模KvM 奥清 复制
-
常前攻整者所在VM期潢或失联:
-
同一宿主機上的其他VM受影;
-
宿主提震要重放恢復;
-
需平台計算前贴可能被拉下续:
-
如渠存在完整利用,理输上可遗成guest-to-host escape。
公 PoC 是 host panic 路径,不是完整公微的 host root explo1t.
11.受影響图
受影警的是 Linux KVM x86 host,重黏包括:
-
Proxmox VE:
-
OpenStack compute 航贴;
-
libvirt/QEMU + KVK 宿主機;
-
自建要平台:
-
白建雾平台:
-
多租户虚凝化平台;
-
胃 nested virtualization 的 KVM 環境;
-
/dev/kn
到本地使用者鼠放的 Linux 何服器。 不屏龄Januscape 主费影誓图:
- W1ndows 本;
,不使用KVM的虚提化早台;
-
未露KVM的着通Linux伺服器;
-
arm64 KVM 的胶 CVE 路镯。
上游 stable 修覆版本包括:
5.18.268
5.15.211
6.1.177
6.6.144
6.12.95
6.18.38
7.1.3
7.2-rc1 及之德
复制 主综修瘦提交: 81ccda38b4e83d8f5cc4fd5503c44e3a33abfeb 复制 生竭境不要只看uane·r,發行版握常backport 安全復,德以 vendor security advisory 和 kernel changelog 為军。
12.如何判自己是否暴露
在宿主楼上重检查三件事。
12.1是否使用KVM
Ax, daub | pcus1 复制 如果存在: kvnI kvn_and 复制 就明KVM 模组正在最入。
12.2 nestedvirtualization是否開
Intel: Cat /sys/module/kvn_intel/parameters/mested 复制 AMD: Cat /sys/nodule/kvn_and/paraneters/nested 复制 如果结果是Y或1,说明宿主燥模組面允許nestedvirtualization 退需要橡查guest是否真的能看到vix或svn: grep wE vnx|svm /proc/cpuinfo 复制
12.3/dev/kvm權限
1s -1 /dev/kvm 复制 如果普通使用者或非必要使用者组可存取,需要重新评估暴露面。對於不轨行虚凝概的伺服器, /dev/kvn通常没有必要。
13.防護建
13.1升級宿主機内核
根本修海是升级host kernel,亚重放速入已修衔版本。 注意: 修的是宿土機内核 不是gucst内核 不是单揭升级QENU 复制 如果使用11vepatch,也感腿CVE-2826-53359及相成配塞修復都已生效。
13.2 限制 nested virtualization
如果移不乘要nested virtual1zatian,唐避免向不可信guest 暴露vnx或svn. OpenStack 環境薇要榜查:
-
flavor extra specs;
-
inage metadata;
-
host aggregate:
-
11bvirt CPU mode;
-
是否使用host-passthrough.
Proxmox/Libvirt 嬰境需要检查 VM CPU fLags,通免無意幂霸 nestedvirt 能力。
13.3收紧/dev/kvm
如果何服器不执行虚授确,可以考露:
-
卸显KVH 核组;
-
阻止KVM模组自动联入;
-
限制/dev/kvn存取概限
对於共享主機,道一贴尤其重要。
13.4监控翼常日
重黏酮注宿主慶日禁中的關建词: gfn mistatch under direct page pte_11st_renove KVH_BUS_ON_DATA_CORRUPTION kernel BUG at arch/x86/kvn/rmu/rnu,c qenu-kve panc 复制 這些資訊可能意味著KVMshadowMMU路出現翼常。
14.總結
Januscape的關鍵不在PoC本身,而在它暴露了KVMshadowMMU中一個基假設錯:
gfn 相同,不代表 shadow page 可以用。
只有gfn和role都相同,複用才是安全的。
复制
攻撃者透過nestedvirtualization横造同gfn、不同role的真表狀態,再利用競態
KVM误複用shadowpage,最終破壤rmap記帐亚發use-after-free。
對防守方來,處理優先級很清晰:
盤點KVM宿主機
確nestedvirtualization暴露圍
升級宿主機内核
限制不可信guest的VMX/SVM
機查/dev/kvm權限
监控KVM巽常日
复制
如果環境中存在多租户KVM、開放nestedvirtualization、使用者可自訂guestkernel,
Januscape應按高優先級處理。
参考資料
V4bel/Januscape:
https://github.com/V4bel/Januscape
V4bel/ITScape:
https://github.com/V4bel/ITScape
V4bel/dirtyfrag:
https://github.com/v4bel/dirtyfrag
NVD CVE-2026-53359:
https://nvd.nist.gov/vuln/detail/CVE-2026-53359
oss-security Januscape disclosure:
https://www.openwall.com/lists/oss-security/2026/07/06/7
Debian Security Tracker CVE-2026-53359:
https://security-tracker.debian.org/tracker/CVE-2026-53359
LWN stable kernel announcement:
https://lwn.net/Articles/1081230/
原始排版图
原始导出图超过单张 WebP 的尺寸上限,以下图片按从上到下的顺序连续保存。
![]()

