
PoC skeleton para CVE-2021-28664, um use-after-free no driver de GPU Mali kbase, demonstrando uma primitiva de leitura/escrita arbitrária de memória física no kernel em Android ARM64.
Mali kbase GPU 驱动 UAF(CVE-2021-28664)→ 内核任意物理内存 读/写原语 的 PoC 骨架。面向通用 ARM64 Android 平台,与任何具体厂商、机型无关。
研究范围 仅到"内核任意物理内存读/写原语"为止:如何把一个 GPU 驱动的 use-after-free 变成稳定、可控、可安全失败的内核内存读写能力。
本仓库不提供任何攻击。 不含成品 exploit、不含可直接运行的代码、 不含任何设备的偏移量/序列号/固件;禁止将任何内容用于攻击行为(见下)。
| 环节 | 前提条件 |
|---|---|
| 漏洞本体 | Mali kbase 驱动版本落在 CVE-2021-28664 受影响区间(上游修复前的 r 系列);与内核版本无关,只看驱动 |
| GPU 资源 | /dev/mali 对应用可达;MEM_ALLOC 支持 SAME_VA 大缓冲;MEM_ALIAS 行为符合漏洞描述 |
| 管道复用 | Linux ≥ 4.5(pipe_buf_operations 引入),实测于 4.9 ~ 4.14 均成立;F_SETPIPE_SZ 可将管道调至单页 |
| KASLR 泄露 | 内核启用 CONFIG_RANDOMIZE_BASE(arm64 ≥ 4.6);anon_pipe_buf_ops 存在于公开符号表 |
| 物理地址模型 | arm64 + vmemmap 布局;sizeof(struct page)、页表格式 必须实测,不可假设 |
pipe_buffer 结构/copy_page_to_iter 校验差异较大的新内核(5.x 起
需按对应源码重新核对,链路结构可参考但细节不通用);/dev/mali 访问权限的环境(seLinux/厂商策略限制)。TODO(DEVICE) 留空,适配是使用者自己的
逆向工作,仓库不代劳。CVE-2021-28664:Mali kbase 驱动的 MEM_ALIAS 路径缺少对 GPU_WR 权限的
检查,攻击者可以把 已经释放的 GPU 内存页 alias 进自己的 GPU 地址空间,
形成"GPU 侧对已释放物理页的持续可见/可写"——一个跨 GPU/内核边界的
use-after-free。
利用价值不在 GPU 内存本身,而在于:
WRITE_VALUE job 对 alias 可见页做定点改写。victim GPU 缓冲 + MMU 页表 dump → 建立物理地址地图
→ trigger 缓冲释放制造压力 → 喷洒 pipe(F_SETPIPE_SZ 调小)
→ pipe_buffer 数组落进释放区(跨缓存 UAF 复用)
→ alias 视图扫描 ops 指针 → 泄露 anon_pipe_buf_ops → KASLR slide
→ GPU 改写 pipe_buffer 的 page / offset / len
→ 借助合法 pipe read/write 路径
⇒ 任意物理页读(伪造 page 指针)
⇒ 任意物理页写(pipe merge 写路径)
⇒ 用已知内容页做自证 oracle,保证读写不落进空洞/未映射区
到此为止。
page_to_virt 实现差异、
no-map 保留区在线性映射里根本不存在(读了就 panic)。docs/
01-exploit-chain.md 从 UAF 到读写原语:各阶段原理与实现要点
02-physical-address-model.md 物理地址模型、安全门、m 歧义、已知陷阱
exploit/
cve-2021-28664-poc.c PoC 模板:读写原语的完整流程骨架(无设备值)
scripts/
README.md 实验自动化工具的设计说明(循环/校验/恢复)
exploit/cve-2021-28664-poc.c 是 读写原语的 PoC 骨架模板:
TODO(DEVICE) 标注,没有任何可直接使用的数值;它用于理解整条链怎么组织,不能直接编译成对任何设备有效的工具。
fs/pipe.c / include/linux/pipe_fs_i.h(公开源码)Documentation/arch/arm64/memory.rst(公开文档)exploit/):GPL-3.0,见 LICENSEdocs/、scripts/):CC BY-NC-SA 4.0,见 LICENSE-DOCS
(禁止商用;衍生内容需相同方式共享并保留本声明)