欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

潜伏16年的Linux KVM漏洞:恶意虚拟机可破坏宿主机内核内存

2026/7/6网络安全

写在前面

最近安全圈曝出一个有点吓人的漏洞——CVE-2026-53359,代号 Januscape。这玩意儿潜伏在 Linux KVM 里整整 16 年,从 2010 年左右就开始存在了。更离谱的是,它能让一台恶意虚拟机直接搞崩宿主机内核,甚至拿到 root 权限跑任意代码。作为一个平时搞虚拟化运维的人,我第一反应就是:这要是被利用了,云平台基本上就裸奔了。

这篇文章我想把漏洞的来龙去脉、技术原理、影响范围和修复方案都掰开揉碎讲清楚。尽量不堆术语,但该有的细节一个不少。


一、漏洞背景:KVM 的“影子内存”是什么鬼?

要理解这个漏洞,得先搞明白 KVM 的内存虚拟化是怎么工作的。

现代 CPU(Intel 和 AMD)都提供了硬件辅助虚拟化技术,比如 Intel 的 EPT(Extended Page Tables)和 AMD 的 NPT(Nested Page Tables)。简单说,就是硬件自己帮你做“客户机物理地址 → 宿主机物理地址”的转换,KVM 基本不用操心,性能很好。

但有一个场景会打破这种美好——嵌套虚拟化。也就是虚拟机里再跑虚拟机(俗称 L1 跑 L2)。

当宿主机(L0)上的客户机(L1)本身也是一个 Hypervisor,它要运行自己的客户机(L2)时,KVM 就没办法继续用 EPT/NPT 了,因为硬件只支持一层地址转换。这时候 KVM 会回退到一种古老的软件模拟方式——影子分页(Shadow Paging)。

影子分页的原理是:KVM 在宿主机内核里维护一套“影子页表”,这套页表直接映射了 L2 的虚拟地址到宿主机物理地址。每次 L2 访问内存,KVM 都要在软件里模拟地址转换。这本来就很复杂,而 Januscape 漏洞就出在这个影子页表的管理逻辑上。


二、漏洞核心:影子页重用逻辑的“一个疏忽”

漏洞的根因在于 KVM 中获取影子页结构的一个函数。这个函数负责在影子页表里查找或创建页表项。它的逻辑大致是:

  1. 根据客户机物理页的帧号(GFN,Guest Frame Number)去查缓存。
  2. 如果找到了一个已有的影子页,就直接拿来用。

问题就出在第二步——它只检查 GFN 是否匹配,却没有检查这个影子页的“角色”是否匹配。

什么叫“角色”?在 KVM 的影子页表里,同一个 GFN 可能对应多种不同的影子页类型,比如:

  • 直接映射页(Direct page)
  • 页表影子页(Page table shadow)

这两种页在内存管理中的行为完全不同。如果错误地把一个直接映射页当成页表影子页来用,KVM 内部的反向映射系统(rmap)就会产生不一致。

反向映射(rmap)是干嘛的?

简单说,rmap 是 KVM 用来追踪“客户机物理页 → 宿主机物理页”映射关系的一套数据结构。当宿主机要回收某块物理内存时,它需要知道哪些客户机页面还在引用它,不然就会出问题。

如果影子页的角色搞混了,rmap 就会记录错误的映射关系。时间长了,这种不一致会积累成更严重的问题——Use-After-Free(释放后使用)。

具体来说:KVM 在清理某个影子页时,可能会错误地释放了一个还被其他地方引用的页。之后内核再访问这个已经被释放、可能重新分配给其他用途的内存区域时,就会写入脏数据,破坏宿主机内核内存。


三、漏洞影响:从 DoS 到完全逃逸

研究人员公开的 PoC(概念验证代码)展示了如何触发这个漏洞。攻击者只需要在客户机(L1)内部精心构造嵌套页表操作,就能让 KVM 的完整性检查检测到内存被破坏,进而导致宿主机内核 panic(崩溃)。

如果你系统开启了 CONFIG_BUG_ON_DATA_CORRUPTION 这类严格的内存损坏检查,崩溃几乎是秒级的,非常稳定。

但更让人后背发凉的是:研究人员证实,同样的漏洞可以被利用来实现从客户机到宿主机的完全逃逸。也就是说,攻击者不仅能搞崩宿主机,还能以 root 权限在宿主机上执行任意代码。虽然公开的 PoC 只展示了 DoS,但研究人员明确表示“完全逃逸是可行的”。


四、跨架构:Intel 和 AMD 都中招

这个漏洞的另一个特点是跨架构。因为它存在于 KVM 中共享的 x86 代码路径里,不管是 Intel 的 VMX(VT-x)还是 AMD 的 SVM(AMD-V),只要用 KVM 跑嵌套虚拟化,都会受影响。

GitHub 上公开的 PoC 已经把架构相关的细节抽象出来了,稍微改改就能同时在 Intel 和 AMD 平台上跑通。更值得注意的是,这个漏洞在公开披露之前,就已经被人在 Google 的 kvmCTF(一个专门针对 KVM 的安全挑战赛)中作为 0Day 漏洞积极利用了。


五、修复方案:补丁已经合入

2026 年 6 月,漏洞被负责任地披露后,Linux 内核社区迅速开发了补丁并合并到主线。修复的核心思路很简单:

只有当客户机帧号(GFN)和页面角色都匹配时,才重用已有的影子页。

也就是说,在查找影子页的缓存时,除了比较 GFN,还要比较页面的角色标识。这样从根本上杜绝了角色混淆的可能。

如果你是运维人员,建议立刻:

  1. 打补丁:升级到包含修复的内核版本。补丁已经合并到 Linux 主线,各大发行版应该也会很快跟进。
  2. 关闭嵌套虚拟化:如果你的业务不需要虚拟机里再跑虚拟机,可以暂时关闭嵌套虚拟化功能来降低风险。具体做法:
    • 在宿主机上检查是否启用了嵌套虚拟化:cat /sys/module/kvm_intel/parameters/nested(Intel)或 cat /sys/module/kvm_amd/parameters/nested(AMD)
    • 如果返回 1 或 Y,说明开启了。可以临时关闭(需要重启或动态调整,具体看发行版文档)。
  3. 特别关注暴露给用户的内嵌虚拟化场景:比如一些云平台允许用户创建嵌套虚拟机,这类系统风险最高。

六、总结

Januscape 这个漏洞,说穿了就是一个“检查不彻底”的问题。但它的影响范围却极其深远——16 年的潜伏期、跨架构、可逃逸。它提醒我们,虚拟化软件虽然已经很成熟,但那些“古老”的代码路径(比如影子分页)依然可能成为安全盲区。

如果你是做虚拟化运维或者内核安全研究的,建议把这篇笔记收藏一下,回头遇到嵌套虚拟化场景时,多留个心眼。


参考来源:

  • 16-Year-Old Linux KVM Vulnerability Allows Malicious Guest to Corrupt Host Kernel Memory(原文为英文,已翻译)
编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消