内容管理系统Joomla! 3.7.0 SQL注入漏洞威胁通告
2017-05-19
当地时间5月17日(北京时间5月18日),内容管理系统(CMS)Joomla! 发布通告称修复了一个SQL注入漏洞(CVE-2017-8917)。该漏洞源于3.7.0版本新引入的“com_fields”组件,该组件无需验证,任何人均可访问使用。这意味着,攻击者可以通过直接访问受影响的网站来进行SQL注入攻击,获取密码哈希或者劫持用户的session从而有可能全面控制该网站。
参考链接:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8917.
https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html
漏洞细节
面向公众的com_fields 组件从相同名称的管理端组建中沿用了一些视图,这样可以更有效的利用通用代码,而不需要重新编写。
从上图的代码中可以看出,$config[‘base_path’]变量的值被设置为JPATH_COMPONENT_ADMINISTRATOR,该常量是管理员组件目录的本地路径,如此Joomla!会从该路径获取相关视图和模块,从而构造对应的参数和值来完成这个操作,构造的URL如下,视图(view)的值为fields,布局(layout)的值为modal:
通过访问该URL,就可以获得该网站上所有的自定义字段列表。
需要注意的是,fields是唯一可以访问的管理员视图(前面所提到的$config[‘base_path’]变量),这样,我们可以直接从管理员的模型(model)来获取数据,也发现了该漏洞的源头就是位于 ./administrator/components/com_fields/models/fields.php文件中的FieldsModelFields下的getListQuery方法:
因为FieldModelFields模块继承了JModelList类,而且包含了上述的代码,因此用户可以将任意代码传入到list.fullordering中。值得注意的是,list.direction和list.ordering在被设置前均会进行一些验证的步骤,但是list.fullordering好像并没有相关验证。
在switch语句之后,不论是否有一个经过验证的合法list.direction和list.ordering,我们都可以利用这条这令来设置想要的值。
因此,要利用此漏洞,攻击者唯一要做的就是在上述的URL中添加适当的参数从而注入一系列的SQL语句。
参考链接:
该技术分析摘自:https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html
受影响的版本
Joomla! CMS versions 3.7.0
不受影响的版本
Joomla! CMS version 3.7.1
规避方案
Joomla! 官方已经及时发布了升级补丁修复了该漏洞,请受影响的用户及时下载升级至最新版本3.7.1。
https://downloads.joomla.org/cms/joomla3/3-7-1
声 明
本安全公告仅用来描述可能存在的安全问题,js1996官网登录不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,js1996官网登录以及安全公告作者不为此承担任何责任。js1996官网登录拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经js1996官网登录允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。