近日,思科Talos漏洞报告指出,YouPHPTube Encoder应用存在多处命令注入漏洞。CVE编号分别为CVE-2019-5127 / CVE-2019-5128 / CVE-2019-5129
漏洞描述
YouPHPTube是一个开源的视频共享网站应用。使用YouPHPTube,用户可以创建自己的视频共享网站,YouPHPTube 将帮助用户导入和编码来自Youtube,Vimeo 等其他网站的视频,用户可以直接在自己的网站上进行分享。
YouPHPTube Encoder是YouPHPTube的编码器插件,该插件可在YouPHPTube中提供编码器功能。使用者在自己的服务器上安装并使用YouPHPTube Encoder以取代第三方公共编码器服务器,可以更快速便捷的编码自己的视频,并且还可以使用私有方式对自己的视频进行编码
在YouPHPTube Encoder2.3中,存在无需身份验证的命令注入漏洞。攻击者可以发送包含特定参数的Web请求来触发这些漏洞。
漏洞分析
ffmpeg
YouPHPTube-Encoder对视频进行处理的核心部分是使用ffmpeg,本次三个漏洞的产生,也是因为YouPHPTube-Encoder底层在执行ffmpeg命令时,没有进行参数过滤导致的。
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
ffmpeg下载地址:
http://ffmpeg.org/download.html
FFmpeg使用方式
使用案例:
从视频中截取一张352x240尺寸大小的,格式为jpg的图片
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
CVE-2019-5127
首先来看下CVE-2019-5127
根据cve描述,可以确定漏洞存在的位置:\objects\getImage.php
存在漏洞的参数:base64Url
跟入getImage.php
位于getImage.php文件25行处,可见从GET请求中读取base64Url参数,并将其base64解码,随后赋值给url变量,这里的base64Url参数便是CVE描述中所说的存在漏洞的参数
通过GET请求中format参数的不同,选择不同的if分支进行视频处理
我们以format参数值为png举例,如上图红框处
ffmpeg -i {$url} -f image2 -s 400x225 -vframes 1 -y {$destination}
把视频的前1帧转换成一张400x225尺寸大小的,格式为jpg的图片 ,待转换的视频地址由$url变量值提供。这里的$url值可以通过GET变量传入,而未经过任何过滤
$exec变量在拼接完成后,在后文被执行
如上图可见,$exec变量被拼接后传递给$cmd
程序通过exec方法将$cmd变量中的内容执行
由于程序未使用escapeshellage或是escapeshellcmd进行过滤,导致远程代码执行漏洞的产生
POC
利用如下poc,即可对系统进行测试
GET /YouPHPTube-Encoder/objects/getImage.php?base64Url=
YGVjaG8gdGVzdCB8IHRlZSAtYSBrdW1hbW9uLmZ1bmA=&format=png
CVE-2019-5128
接下来看下CVE-2019-5128
根据cve描述,可以确定漏洞存在的位置:\objects\getImageMP4.php
存在漏洞的参数:base64Url
getImageMP4.php
存在问题的参数仍然是base64Url,如上图
同上一个CVE类似,最终未经过滤,被拼接语句执行
POC
利用如下poc,即可对系统进行测试
GET
/YouPHPTube-Encoder/objects/getImageMP4.php?base64Url=YGVjaG8gMTIzIHwgdGVlIC1hIHRoaXNzeXN0ZW1oYXZlYmVlbmV4cGxvaXRlZDEyMzRg&format=jpg
CVE-2019-5129
最后看下CVE-2019-5129
根据cve描述,可以确定漏洞存在的位置:\objects\ getSpiritsFromVideo.php
存在漏洞的参数:base64Url
getSpiritsFromVideo.php
存在问题的参数为base64Url,如上图
拼接命令,在未经过滤的情况下,通过exec执行命令
POC
利用如下poc,即可对系统进行测试
/YouPHPTube-Encoder/objects/getSpiritsFromVideo.php?base64Url=YGVjaG8gMTIzIHwgdGVlIC1hIHRoaXNzeXN0ZW1oYXZlYmVlbmV4cGxvaXRlZDEyMzRg&format=jpg
修复:
官方暂时仍未修复以上漏洞