com_fields组件出现漏洞,com_fields组件是在3.7版本添加的,如果你使用此版本,将受到影响,并应尽快更新。这个组件可以公开访问,意味着任何能访问你站点的用户都可以发起攻击。
漏洞细节
从上图的代码可以看出,它使用JPATH_COMPONENT_ADMINISTRATOR常量值设置$config['base_path']变量,该值代表管理员组件目录的本地路径,当访问的view是fields,layout是modal的时候,程序会从JPATH_ADMINISTRATOR中加载com_fields,这就意味着普通用户可以通过这样的请求来使用管理员的com_fields,构造URL如下所示:
/index.php?option=com_fields&view=fields&layout=modal
访问此URL可以根据各种参数进行排序的站点上可用的所有自定义字段的列表。
这是唯一可以访问的管理员views字段, 将从管理员models获取数据(我们前面讨论的$config['base_path'])。在这种情况下,我们发现的漏洞位于.MarchModelFields模型(model)的./administrator/components/com_fields/models/fields.php中。
经查找,出问题方法是getListQuery。
如果不熟悉Joomla!处理SQL查询,$query->order()是一个方法,其输入将被连接到一个查询的ORDER BY语句,假如我们未经检测的用户带到这里,看看会发生什么样的事情。
用户输入传入到list.fullordering,因为FieldsModelFields模型继承JModelList类,它同样也包含上面的代码段。你可能会注意到它对内容做了一些验证,然后相应地设置list.direction和list.ordering,但是list.fullordering呢?
在switch语句之后,这个指令用我们可以控制的值来设置我们正在寻找的状态,不管它是否生成了一个有效的list.direction或者list.ordering状态。
所以为了利用这个漏洞,攻击者必须做的是为URL添加适当的参数,以便注入嵌套的SQL查询。
结论
这是一个严重的漏洞,请大家尽快更新!
|