🟠 高危 | CVE-2026-66039 — FFmpeg through 8.1.2, fixed in commit aafb5c6, con...
🟠 【深度分析】高危安全漏洞:CVE-2026-66039
CVSS 评分: 高危(8.7)🟠 状态: Undergoing Analysis 发布时间: 2026-07-24
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-66039 |
| CVSS 评分 | 8.7 🟠 |
| 严重程度 | 高危 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-122,CWE-190 |
| 发布时间 | 2026-07-24 |
| 最后更新 | 2026-07-29 |
| 状态 | Undergoing Analysis |
| 数据来源 | disclosure@vulncheck.com |
CVSS 评分:8.7(高危)
CVSS 向量:CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X
漏洞状态:Undergoing Analysis
发布时间:2026-07-24
漏洞概述
CVE-2026-66039 是 FFmpeg 内置 MACE6 音频解码器中存在的一个有符号整数溢出漏洞。攻击者可通过构造恶意的 CAF(Core Audio Format)文件,在 desc chunk 中设置超大的 bytes_per_packet 和 frames_per_packet 值,触发 mace_decode_frame() 函数在输出采样数计算过程中的整数溢出,进而导致堆缓冲区分配不足,最终形成堆越界写入(heap out-of-bounds write)。
该漏洞影响 FFmpeg 8.1.2 及之前版本,修复版本为包含 commit aafb5c6 的后续版本。CVSS 4.0 评分为 8.7(高危),表明漏洞可利用性较高,且对机密性、完整性和可用性均可能造成严重影响。目前 NVD 正在进一步分析中。
受影响组件与版本
| 项目 | 内容 |
|---|---|
| 受影响软件 | FFmpeg |
| 受影响版本 | 8.1.2 及更早版本(包括所有使用受影响 MACE6 解码器的分支/构建) |
| 修复版本 | 包含 commit aafb5c6 的版本(建议升级至 8.1.3 或更高版本,或应用相应补丁) |
| 受影响组件 | libavcodec 中的 MACE6 音频解码器(mace_decode_frame 函数) |
| 漏洞类型 | CWE-190 整数溢出、CWE-122 堆缓冲区溢出 |
注意:由于 FFmpeg 广泛被各种多媒体播放器、转码工具、浏览器及音视频处理框架集成,实际受影响面可能远超官方发行版本身,需关注各下游组件的更新状态。
漏洞原理分析
1. 漏洞成因
MACE6(Macintosh Audio Compression/Expansion 6:1)是一种古老的音频压缩格式,FFmpeg 在 mace.c 中实现了解码逻辑。问题出在 mace_decode_frame() 函数对输出样本数量的计算上。
当解析 CAF 文件时,desc chunk 中的 bytes_per_packet 和 frames_per_packet 字段由外部输入直接控制,未经充分验证。在计算解码后应分配的缓冲区大小时,代码很可能执行类似这样的运算:
unsigned int channels = ...;
int bytes_per_packet = ...; // 从文件读取
int frames_per_packet = ...; // 从文件读取
int block_align = bytes_per_packet / frames_per_packet;
int samples_per_frame = ...;
int output_samples = frames_per_packet * channels * samples_per_frame;
当 frames_per_packet 或相关乘数被设置为恶意值时,该乘法运算可能产生有符号整数溢出,导致 output_samples 变成一个很小的正数、零甚至负数(取决于具体实现)。随后,FFmpeg 基于这个被截断的错误值分配堆缓冲区,例如:
av_fast_pcm_realloc_common(...) // 或 av_malloc / av_mallocz
由于分配的缓冲区远小于实际解码输出所需大小,后续解码过程中将向缓冲区外写入大量音频数据,造成堆越界写。
2. 攻击向量与触发流程
攻击者构造一个合法的 CAF 容器,并在 desc chunk 中设置:
mBytesPerPacket:一个极大值(如0x7FFFFFFF)mFramesPerPacket:一个极大值(或精心配合的值)
当播放器或处理工具调用 FFmpeg 解码该文件时,mace_decode_frame() 读取上述字段并执行整数运算,整数溢出使分配大小错误。随后在解码循环中,程序将解码出的音频采样连续写入缓冲区,最终突破堆边界,造成内存损坏。
3. 与同类漏洞的共性
这是典型的"未校验输入 → 整数溢出 → 错误分配 → 越界写"漏洞链,在音频/图像解码器中屡见不鲜。其核心问题在于:
- 对容器中的长度/计数字段没有进行范围检查;
- 乘法运算未使用安全算术(如检查溢出);
- 分配缓冲区时未与后续实际写入量进行一致性校验。
影响评估
CVSS 向量解读
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
| 指标 | 值 | 含义 |
|---|---|---|
| AV(攻击向量) | N | 网络,可通过网络传播恶意文件(如 URL 下载、流媒体) |
| AC(攻击复杂度) | L | 低,无需特殊条件即可利用 |
| AT(攻击所需代码) | N | 无需与目标环境交互的防御机制对抗 |
| PR(权限要求) | N | 无需任何权限 |
| UI(用户交互) | P | 需要用户交互,如用户打开恶意音频文件 |
| VC/VI/VA(机密性/完整性/可用性影响) | H/H/H | 对受影响的本地 FFmpeg 进程的机密性、完整性、可用性均为高影响 |
| SC/SI/SA(后续系统影响) | N/N/N | 未评估或暂不影响平台之外的系统 |
实际威胁分析
- 利用难度:中等偏低。攻击者只需构造一个畸形 CAF 文件,诱使用户通过受影响的 FFmpeg 版本打开或处理该文件。由于无需特殊权限且攻击复杂度低,实际利用门槛不高。
- 影响后果:堆越界写是最危险的漏洞类型之一,可利用其实现:
- 进程崩溃(DoS);
- 篡改堆上的相关数据结构,进而劫持控制流;
- 在满足现代操作系统防护(ASLR、DEP)条件下,结合信息泄露可实现任意代码执行。
- 影响面:FFmpeg 被 VLC、Chrome/Firefox 浏览器(在特定音视频场景)、各种商业转码软件、嵌入式设备等广泛依赖。因此漏洞可波及大量第三方产品。
- 局限:需要用户交互(UI:P)是唯一的显著缓解因素;但常见的"用户播放恶意音频文件"场景即为满足该交互。
特别说明:根据现有 NVD 描述,漏洞细节已公开,但尚未有公开的完整利用代码。鉴于其可利用性,建议尽快升级。
修复建议
1. 升级 FFmpeg 版本
最彻底的修复方式是将 FFmpeg 升级至包含 commit aafb5c6 的版本。请从官方仓库获取最新代码,或更新至已集成该补丁的稳定版本(如 >= 8.1.3,以及官方维护的 master 分支)。
# 若通过源码安装
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout <已包含aafb5c6的tag或commit>
./configure && make && sudo make install
2. 临时缓解措施
在无法立即升级的情况下,可采取以下措施降低风险:
- 限制文件来源:不要打开来源不明的
.caf/.aiff等音频文件,尤其是来自不可信网络链接的文件; - 使用替代解码路径:如果业务允许,禁用 MACE6 解码器(
--disable-decoder=mace6)或采用沙箱机制隔离 FFmpeg 进程; - 启用内存防护:在构建 FFmpeg 时开启 ASan/UBSan 等检测工具,便于及时发现问题;对于生产环境,依赖系统级 ASLR、堆保护等缓解手段,但注意这些不能替代补丁;
- 监控异常行为:对处理多媒体文件的进程进行监控,警惕异常内存访问或崩溃。
3. 检查下游依赖
由于许多软件内置或动态链接 FFmpeg,请及时检查并更新:
- 使用
ffmpeg -version确认当前版本; - 关注 VLC、OBS Studio、Blender、Chromium 等项目发布的安全公告;
- 对于自研系统,检查是否使用了受影响的 FFmpeg API。
参考资料
- NVD 漏洞详情页:https://nvd.nist.gov/vuln/detail/CVE-2026-66039
- CWE-190:整数溢出(Integer Overflow or Wraparound)
https://cwe.mitre.org/data/definitions/190.html - CWE-122:堆缓冲区溢出(Heap-based Buffer Overflow)
https://cwe.mitre.org/data/definitions/122.html - FFmpeg 官方网站:https://ffmpeg.org
- FFmpeg Git 仓库:https://git.ffmpeg.org/ffmpeg.git
- 修复 commit 参考:
aafb5c6(请以官方最新代码为准)
免责声明:本分析基于 NVD 公开数据及常见漏洞模式推断,部分实现细节可能因版本差异而有所不同。在实际应用修复前,请以 FFmpeg 官方公告和最新源码为准。