CVE-2016-1898:FFmpeg任意文件读取漏洞研究

CVE-2016-1898:FFmpeg任意文件读取漏洞研究

时间:2022-12-21 作者:安帝科技


FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。应用范围广泛,国内诸多大厂也有使用。

Part1 漏洞状态

Part2 漏洞描述

FFmpeg 2.x允许远程攻击者通过在HTTP Live Streaming(HLS)M3U8文件中使用concat协议进行跨源攻击并读取任意文件,导致外部HTTP请求中的URL字符串包含本地文件。

影响范围
FFmpeg 2.8.x < 2.8.5
FFmpeg 2.7.x < 2.7.5
FFmpeg 2.6.x < 2.6.7
FFmpeg 2.5.x < 2.5.10

复现环境:
Kali 64
FFmpeg-2.8.1

Part3 漏洞复现

– 安装yasm-1.3.0
1)下载:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
2)解压:tar zxvf yasm-1.3.0.tar.gz
3)切换路径:cd yasm-1.3.0
4)执行配置:./configure
5)编译:make
6)安装:make install
– 安装FFmpeg-2.8.1
·wget 下载
https://ffmpeg.org/releases/ffmpeg-2.8.1.tar.bz2
·tar -xjvf ffmpeg-2.8.1.tar.bz2 解压下载的文件
·cd ffmpeg-2.8.1/
·编译和安装
./configure –enable-shared –prefix=/monchickey/ffmpeg
make
make install
运行后可能会提示找不到libavdevice.so.56
find / -name “libavdevice.so.56”
添加动态库路径(根据)

通过python exp脚本生成一个特殊构造的验证视频文件 file_read.avi

使用命令出发ffmpeg漏洞
./ffmpeg -i /home/kali/Desktop/poc/file_read.avi /home/kali/Desktop/poc/file_read.mp4

打开转换后的mp4文件

出现文件内容
复现成功!

漏洞细节:
由于漏洞是出现在解析HLS流媒体文件出的问题,所以我们必须先了解HLS。
HLS(HTTP Live Streaming)是Apple公司开发的一种基于HTTP协议的流媒体通信协议,大多数都应用在PC上和Iphone上。它的基本原理是把一个视频流分成很多个很小很小很小的ts流文件,然后通过HTTP下载,每次下载一点点。在一个开始一个新的流媒体会话时,客户端都会先下载一个m3u8(播放列表 Playlist)文件,里面包含了这次HLS会话的所有数据。

m3u8 文件结构如下:
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:2
#EXTINF:6,
http://**.flv.ts?ts_start=0&ts_end=5.9&ts_seg_no=0&ts_keyframe=1
#EXTINF:0,
http://**.flv.ts?ts_start=5.9&ts_end=6.367&ts_seg_no=1&ts_keyframe=1
#EXT-X-ENDLIST

解析:
#EXTM3U 标签是m3u8的文件头,开头必须要这一行
#EXT-X-TARGETDURATION 表示整个媒体的长度 这里是6秒
#EXT-X-VERSION:2 该标签可有可无
#EXTINF:6, 表示该一段TS流文件的长度
#EXT-X-ENDLIST 这个相当于文件结束符
这些是m3u8的最基本的标签,而问题就出在FFMpeg去请求TS流文件的时,由于我们可以伪造一个m3u8文件,FFMpeg不会判断里面的流地址,直接请求。

总结来说,就是通过构造一个特殊的流媒体文件,包含m3u8标签,里面内容指向kali系统内部的文件,这样 ffmpeg在转换视频文件的时候会读取指向的kali系统内部文件,并转换成视频。

这是通过winhex打开的特殊构造的avi文件,可以看到里面存在m3u8 文件结构。

Part4 修复缓解建议

1. 软件升级至最新版本。
2. 监控网络流量,查看是否有恶意代码的流量特征。
3. 安装主机卫士,设置IP白名单。

————————————————
获取更多情报
联系我们,获取更多漏洞情报详情及处置建议,让企业远离漏洞威胁。
电话:18511745601
邮箱:shiliangang@andisec.com