fm0ss/cve-2025-9951-ffmpeg-jp2-poc
GitHub: fm0ss/cve-2025-9951-ffmpeg-jp2-poc
针对 FFmpeg JPEG 2000 解码漏洞 CVE-2025-9951 的概念验证项目,记录了从畸形文件触发内存损坏到确定性受控 callback 执行的完整利用研究过程。
Stars: 0 | Forks: 0
# CVE-2025-9951 FFmpeg JPEG 2000 漏洞利用研究
本仓库记录了从通过验证的 JPEG 2000 component-mapping 不匹配,到在 FFmpeg 中实现受控 callback 执行的过程。
所含的 PoC(概念验证)受到有意限制。当通过 GDB 并使用文档中记录的确定性分配器内存布局启动时,它适用于匹配的本地研究版本。GDB 仅负责启动进程并提供运行环境:它不会设置断点、修改内存或寄存器、跳过清理或调用 callback。这**不是**一个可移植、独立运行或远程漏洞利用的程序。
## 目录
- `WRITEUP.md` — 完整的漏洞利用过程,包括失败的方法和未来的工作。
- `poc.jp2` — 已验证的 450 字节确定性内存布局 PoC。
- `generate_poc.py` — 针对文档中记录的内存布局的独立 payload 生成器。
- `geometry.py` — 用于查找具有清理安全性的 `112x18` 几何结构的辅助工具。
- `run_poc.gdb` — GDB 批处理启动脚本。
## 验证结果
在研究系统中,该 PoC 将 `AVBuffer.free` 覆写为 libc 的 `system`,并将 `AVBuffer.opaque` 覆写为指向以下良性命令的指针:
```
touch /tmp/cve_2025_9951_small_rce.gdb_proof
```
该 payload 的 SHA-256 为:
```
d429a7fe323f3dcb2b0b98e097ddf2ef3f83ca9d7e656e6e70d2bf0d01180069
```
## 复现
环境要求:
- 匹配的、带有符号信息的 FFmpeg 漏洞研究版编译产物;
- x86-64 Linux 环境下的 GDB;
- OpenJPEG 的 `opj_compress` 工具(用于重新生成 payload);
- 分析文档中描述的 glibc 和二进制文件内存布局。
生成文件:
```
python3 generate_poc.py
```
运行它(如有必要,请替换二进制文件路径):
```
gdb -q -batch \
-x run_poc.gdb \
--args ./ffmpeg-vulnerable/ffmpeg_g
```
验证良性标记:
```
test -e /tmp/cve_2025_9951_small_rce.gdb_proof
```
`generate_poc.py` 中固定的地址是刻意设定的,仅在确定性的首次漏洞利用模型中才有效。地址的可移植性和原生 heap 的稳定性仍然是尚未解决的问题。
## 安全提示
仅在隔离环境中、且针对您拥有或获得明确授权进行测试的系统使用。包含 marker-file 命令是为了证明取得了控制权,而不会打开 shell 或联系其他主机。
标签:FFmpeg, JPEG2000, 情报收集, 数据展示, 漏洞研究, 漏洞验证(PoC), 红队, 逆向工具