FFmpeg本地任意文件读取漏洞
漏洞原理
FFmpeg 进行视频转码的时候,使用了 concat 协议中的 ‘ | ’ 语法,如下图官方文档所示:
FFmpeg offical document.png
所以针对这一点,我们利用 file 协议构造本地文件路径指令,并将其加于concat 协议中,使得 FFmpeg 在处理视频流时候执行指令,将指令指向的内容直接加载到视频中,然后通过查看视频即可获得文件内容。
漏洞复现
- 利用 poc 先构造一个含有文件路径的视频 security.avi。
这里使用的文件路径为:file:///etc/passwd
构造命令为:python3 gen_xbin_avi.py file:///etc/passwd security.avi - 按照公开的漏洞通知,需要将构造好的视频上传到有关视频解析的网站去。
这里我们不搭建流转码服务器,直接本地使用 FFmpeg 进行转码。
使用的 FFmpeg 版本为:3.2.2
转码命令为:ffmpeg -i security.avi output.mp4 - 得到视频 output.mp4,打开后发现确实获取得到了本地/etc/passwd 的内容。
修复方案
- 升级版本至 FFmpeg 3.3.2 版本(目前最新) 。
- 禁用 file://等协议类型。
参考
neex大神的poc
Local File Disclosure via ffmpeg
FFmpeg各版本的安装
FFmpeg安装中各种问题的解决方案
FFmpeg中的SSRF问题
申明:
本文内容参考网上知识,自己从中实践感悟而来,希望能对大家有所帮助。
(菜鸡作者木有直接给poc的能力也很绝望啊)
如果牵扯版权问题请及时联系,愿意更改删减~~
网友评论