FFmpeg的MagicYUV解码器曝出高危漏洞(CVE-2026-8461),攻击者可利用该漏洞将看似无害的媒体文件武器化,在某些场景下甚至能实现远程代码执行(RCE)。该漏洞被命名为"PixelSmash",属于FFmpeg的libavcodec组件中的堆越界写入漏洞,CVSS评分为8.8(高危级)。
漏洞影响范围
根据JFrog安全研究团队的报告,单个精心构造的AVI、MKV或MOV文件就足以导致应用程序崩溃,若配合完整的漏洞利用链,还能在底层系统上执行任意命令。FFmpeg是最广泛部署的媒体处理框架之一,被集成到无数应用程序中,包括桌面视频播放器、Linux缩略图生成器、自托管媒体服务器、云端转码管道,甚至AI/ML数据处理栈。
由于MagicYUV解码器在上游FFmpeg构建和大多数主流Linux发行版中默认启用,该漏洞会悄无声息地传播到任何链接libavcodec的项目中。
漏洞技术细节
JFrog已确认该漏洞会导致Kodi、mpv、ffmpegthumbnailer、Jellyfin、Emby、Nextcloud、Immich、PhotoPrism和OBS Studio等应用程序崩溃,并成功演示了通过50KB的恶意AVI文件在Jellyfin媒体服务器和Nextcloud实例上实现完整RCE。
漏洞根源在于MagicYUV解码器处理视频切片和色度平面高度的方式。MagicYUV对每帧使用水平分割的切片,对于YUV420P等子采样格式,解码器必须将亮度切片高度转换为色度切片高度。由于帧分配器与解码器之间的舍入不匹配,攻击者控制的slice_height值会导致FFmpeg在堆分配缓冲区末尾写入一整行色度数据。
在PoC中,精心构造的媒体流将slice_height设置为奇数值,导致逐行偏移的累积,最终将写入操作直接推送到相邻的堆结构中。关键的是,溢出写入会落在FFmpeg用于引用计数帧缓冲区的AVBuffer结构上。通过构造恶意负载,攻击者可覆盖FFmpeg内存结构,导致调用带有攻击者控制命令的system()函数,从而实现远程代码执行。
在JFrog的Jellyfin漏洞利用中,当媒体库扫描触发ffprobe处理恶意文件时,该漏洞被武器化为反向shell,以Jellyfin服务账户身份执行。
攻击面与缓解措施
该漏洞攻击面广泛且往往"近乎零点击"。在桌面上,仅浏览文件夹就可能通过ffmpegthumbnailer触发缩略图生成并激活漏洞。在服务器上,当新文件出现或被查看时,Jellyfin、Emby和Nextcloud等媒体平台会自动调用ffmpeg或ffprobe生成预览和元数据。JFrog还警告称,云媒体管道和使用FFmpeg(直接或通过PyAV/OpenCV)解码用户提供视频的AI/ML环境中也存在类似攻击向量,可能将PixelSmash转变为共享推理或数据处理工作器中的潜在拒绝服务或利用原语。
要利用PixelSmash漏洞,攻击者只需将精心构造的媒体文件传送到任何使用启用了MagicYUV的FFmpeg解码视频的应用程序中。除了上传、共享或放置文件进行自动处理的能力外,不需要任何身份验证或提升的权限。这使得常见配置(如直接将文件写入媒体库目录的种子客户端)特别危险,因为类似Jellyfin的自动扫描功能可以在下载后立即处理恶意内容,无需任何用户交互。
该漏洞已在修补的FFmpeg版本(如8.1.2或更高版本,应用了MagicYUV边界检查)中得到修复,强烈建议用户尽快升级其FFmpeg构建。作为临时缓解措施,管理员可以禁用MagicYUV解码器重新构建FFmpeg,或在解码前应用拒绝无效slice_height值的最小补丁。由于这是一个基础库中的供应链问题,建议嵌入FFmpeg的项目审核其构建,尽可能减少启用的编解码器,并采用类似Plex最小解码器配置的允许列表策略,以限制未来的爆炸半径。