FFmpeg本地任意文件读取漏洞 / FFmpeg Local arbitrary file read vulnerability

FFmpeg本地任意文件读取漏洞

漏洞原理

FFmpeg 进行视频转码的时候,使用了 concat 协议中的 ‘ | ’ 语法,如下图官方文档所示:


FFmpeg offical document.png

所以针对这一点,我们利用 file 协议构造本地文件路径指令,并将其加于concat 协议中,使得 FFmpeg 在处理视频流时候执行指令,将指令指向的内容直接加载到视频中,然后通过查看视频即可获得文件内容。

漏洞复现

  1. 利用 poc 先构造一个含有文件路径的视频 security.avi。
    这里使用的文件路径为:file:///etc/passwd
    构造命令为:python3 gen_xbin_avi.py file:///etc/passwd security.avi
  2. 按照公开的漏洞通知,需要将构造好的视频上传到有关视频解析的网站去。
    这里我们不搭建流转码服务器,直接本地使用 FFmpeg 进行转码。
    使用的 FFmpeg 版本为:3.2.2
    转码命令为:ffmpeg -i security.avi output.mp4
  3. 得到视频 output.mp4,打开后发现确实获取得到了本地/etc/passwd 的内容。
FFmpeg result.png

修复方案

  1. 升级版本至 FFmpeg 3.3.2 版本(目前最新) 。
  2. 禁用 file://等协议类型。

参考

neex大神的poc
Local File Disclosure via ffmpeg
FFmpeg各版本的安装
FFmpeg安装中各种问题的解决方案
FFmpeg中的SSRF问题

申明:

本文内容参考网上知识,自己从中实践感悟而来,希望能对大家有所帮助。
(菜鸡作者木有直接给poc的能力也很绝望啊)
如果牵扯版权问题请及时联系,愿意更改删减~~

你可能感兴趣的:(FFmpeg本地任意文件读取漏洞 / FFmpeg Local arbitrary file read vulnerability)