ByteNoteByteNote
从虚拟机越狱到宿主机:一条逃逸链,起点是内核 9.3 分漏洞
字

字节笔记本

2026年11月7日 · 约 5 分钟读完

从虚拟机越狱到宿主机:一条逃逸链,起点是内核 9.3 分漏洞

API中转
¥120

安全研究团队 pwn.ai 公布了 Firecracker 微虚拟机的完整逃逸链(HN 158 分、71 条评论,2026-11-06):从客机里定位并改掉宿主机上 vCPU 线程的保存寄存器,让 Firecracker 在 KVM 返回时执行研究者指定的调用,最终以宿主机 root 身份执行代码。整条链的起点,是 Linux 内核一个已确认的严重漏洞 CVE-2026-99999。先划清性质:这是研究演示,不是野外利用。

pwn.ai 逃逸链博文配图

起点:CVE-2026-99999(MITRE CVE API 核实)

状态 PUBLISHED,Linux CNA 分配,2026-09-25 保留、2026-10-15 发布;CVSS 3.1 评分 9.3(CRITICAL),向量 AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H,CWE-20 输入验证不当。问题出在 ipv4 的 checksum_start 校验缺失:带错误校验和元数据的包进入 ipv4 协议栈后,skb_checksum_help 会破坏网络头。攻击场景是恶意 microVM 通过 virtio-net 构造校验和元数据发往宿主机 TAP,宿主机内核处理时触发——可导致宿主机内存泄露、崩溃与管理员权限代码执行。影响范围从 Linux 内核 2.6.27 起至各稳定分支的修复版(5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.57、7.2.11)。

逃逸链四步(博文原文)

  1. EPT 解析器:客机页放可识别 nonce,用宿主机内存原语搜索 EPT 根,把客机物理地址翻译成宿主机物理地址;
  2. 反向映射器:从宿主机物理页反推页表根(host PGD),恢复 Firecracker 进程的地址空间,并用已知的 write(2) 包装字节序列确认 ELF 映像、算出 ASLR 加载基址;
  3. 帧定位器:在宿主机内存里找正在 KVM_RUN 的 vCPU 线程保存的 pt_regs 帧——用 ioctl 续接地址、文件描述符、栈指针等多项校验排除陈旧栈内容;
  4. 改寄存器与栈:让 KVM 返回时进入 write 包装调用、在 Firecracker 自己的 stderr 上写出标记字符串 N8V23M2\n,再经 xor eax,eax; ret 清掉返回值、回到原 ioctl 续接点,并恢复三处临时栈字。

验证结果(博文原文)

pwn.ai Part 1 配图

宿主机捕获到恰好 8 字节标记;Firecracker 进程(PID 2936)事后仍活着;客机 SSH 仍响应、uptime 1615.72 秒;三处临时栈字全部恢复;可执行文本与共享库未修改;宿主机内核事后无错误。目标环境要说清前提:Firecracker v1.16.1(x86-64)、宿主机内核 7.0.0-1011-aws、客机内核 6.18.44+;Firecracker 以 root 身份经 systemd-run 直接启动、未用 jailer——"拿到 root"是这个特定配置下的结果,不是"任意 Firecracker 部署都能拿到 root"。

判断:隔离边界是一条链,不是一堵墙

对跑 microVM、多租户沙箱的读者,这篇的落点一句话:单看 CVE-2026-99999 是内核网络栈问题,单看 Firecracker 是 VMM 设计问题,两处合起来才构成"不可信代码跑在 microVM 里"假设下的完整逃逸。三件事说在前面:① 这是研究者演示,写引用时带定语,别写成"Firecracker 被攻破、别用了";② 修复在内核侧(校验 checksum_start),Firecracker 侧的缓解在 jailer/降权/seccomp——研究者自己也说明,用了这些生产 containment 的部署需另行评估;③ 本文只写链路结构与防御启示,不提供复现细节。

参考来源

相关文章

分享: