Lobsters | 📄 原文链接 | 2026-11-08 收录

从 guest 里逃出 Firecracker:改写 pt_regs 拿宿主 root

来源:pwn.ai — 2026-11

📋 概述

pwn.ai 系列的第二篇,接上一集的「宿主内存读写原语」,这次完成从 microVM 内 guest 到宿主 root 的完整链条(CVE-2026-99999)。路径分五段:先在 guest 页里放一个可识别的 nonce,枚举候选 EPT 根并走页表,找出能把 guest 物理地址翻译到含 nonce 那一页的根,得到 guest_page_hpa;再反向搜宿主页表,找映射了这块物理页的进程,反推出它的宿主 PGD;接着在那套地址空间里定位 Firecracker 的 ELF 镜像、用 write(2) 包装函数的字节签名确认,并恢复 ASLR 的加载基址;然后在宿主内存里找 pt_regs 帧,要求系统调用是进行中的 ioctl、请求参数是 KVM_RUN、指令指针落在 Firecracker 的 ioctl 返回点、栈指针能通过宿主 PGD 翻译、段选择子与标志位合法、调用者返回地址在代码段内,一次筛到唯一候选;最后改写这个帧:RIP 指向 write 包装、RDI=2、RSI 指向栈上的标记串、RDX=8,RSP 指向临时返回序列。返回序列先放 xor eax,eax; ret 把 KVM_RUN 期望的 0 返回值补上,再回到原 ioctl 继续点。guest 往串口写一个字节触发出 KVM,Firecracker 就如实在自己的 stderr 打印出 N8V23M2,随后三个栈字被复原、进程存活、SSH 仍通。目标环境是 Firecracker v1.16.1 加宿主内核 7.0.0-1011-aws,且没有启用 jailer,因此这次受控调用以 root 执行。

🔑 核心要点

💡 金句

Firecracker 本应把不可信代码关在 microVM 里;我们逃了出来,并在宿主上以 root 身份执行了代码。
← 返回 Lobsters 首页