近日,思科Talos漏洞报告指出,YouPHPTube Encoder应用存在多处命令注入漏洞。CVE编号分别为CVE-2019-5127 / CVE-2019-5128 / CVE-2019-5129

漏洞描述

YouPHPTube是一个开源的视频共享网站应用。使用YouPHPTube,用户可以创建自己的视频共享网站,YouPHPTube 将帮助用户导入和编码来自Youtube,Vimeo 等其他网站的视频,用户可以直接在自己的网站上进行分享。

YouPHPTube Encoder是YouPHPTube的编码器插件,该插件可在YouPHPTube中提供编码器功能。使用者在自己的服务器上安装并使用YouPHPTube Encoder以取代第三方公共编码器服务器,可以更快速便捷的编码自己的视频,并且还可以使用私有方式对自己的视频进行编码

MVCum4.md.png

在YouPHPTube Encoder2.3中,存在无需身份验证的命令注入漏洞。攻击者可以发送包含特定参数的Web请求来触发这些漏洞。

漏洞分析

ffmpeg

YouPHPTube-Encoder对视频进行处理的核心部分是使用ffmpeg,本次三个漏洞的产生,也是因为YouPHPTube-Encoder底层在执行ffmpeg命令时,没有进行参数过滤导致的。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

ffmpeg下载地址:

http://ffmpeg.org/download.html

FFmpeg使用方式

MVClkR.md.png

使用案例:

从视频中截取一张352x240尺寸大小的,格式为jpg的图片 

ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg

CVE-2019-5127

首先来看下CVE-2019-5127

MVCCwj.md.png

根据cve描述,可以确定漏洞存在的位置:\objects\getImage.php

存在漏洞的参数:base64Url

跟入getImage.php

MVCPTs.md.png

位于getImage.php文件25行处,可见从GET请求中读取base64Url参数,并将其base64解码,随后赋值给url变量,这里的base64Url参数便是CVE描述中所说的存在漏洞的参数

MVCFkn.md.png

通过GET请求中format参数的不同,选择不同的if分支进行视频处理

我们以format参数值为png举例,如上图红框处

ffmpeg -i {$url} -f image2 -s 400x225 -vframes 1 -y {$destination}

把视频的前1帧转换成一张400x225尺寸大小的,格式为jpg的图片 ,待转换的视频地址由$url变量值提供。这里的$url值可以通过GET变量传入,而未经过任何过滤

$exec变量在拼接完成后,在后文被执行

MVCkYq.png

如上图可见,$exec变量被拼接后传递给$cmd

程序通过exec方法将$cmd变量中的内容执行

由于程序未使用escapeshellage或是escapeshellcmd进行过滤,导致远程代码执行漏洞的产生

POC

利用如下poc,即可对系统进行测试

GET /YouPHPTube-Encoder/objects/getImage.php?base64Url=

YGVjaG8gdGVzdCB8IHRlZSAtYSBrdW1hbW9uLmZ1bmA=&format=png

CVE-2019-5128

接下来看下CVE-2019-5128

MVCAf0.md.png

根据cve描述,可以确定漏洞存在的位置:\objects\getImageMP4.php

存在漏洞的参数:base64Url

getImageMP4.php

MVCPTs.md.png

存在问题的参数仍然是base64Url,如上图

同上一个CVE类似,最终未经过滤,被拼接语句执行

MVCZlT.md.png

POC

利用如下poc,即可对系统进行测试

GET
/YouPHPTube-Encoder/objects/getImageMP4.php?base64Url=YGVjaG8gMTIzIHwgdGVlIC1hIHRoaXNzeXN0ZW1oYXZlYmVlbmV4cGxvaXRlZDEyMzRg&format=jpg

CVE-2019-5129

最后看下CVE-2019-5129

MVC9mQ.md.png

根据cve描述,可以确定漏洞存在的位置:\objects\ getSpiritsFromVideo.php

存在漏洞的参数:base64Url

getSpiritsFromVideo.php

MVCSOg.png

存在问题的参数为base64Url,如上图

MVCK0J.md.png

拼接命令,在未经过滤的情况下,通过exec执行命令

POC

利用如下poc,即可对系统进行测试

/YouPHPTube-Encoder/objects/getSpiritsFromVideo.php?base64Url=YGVjaG8gMTIzIHwgdGVlIC1hIHRoaXNzeXN0ZW1oYXZlYmVlbmV4cGxvaXRlZDEyMzRg&format=jpg

修复:

官方暂时仍未修复以上漏洞