Drupal 远程代码执行漏洞大规模爆发(CVE-2018-7600)

  • 来源:深信服安全中心
  • 发布时间:2018-05-04
#

事件描述

    2018年3月28日,流行的开源内容管理框架Drupal曝出一个远程代码执行漏洞,漏洞威胁等级为高危,漏洞对应的CVE编号为CVE-2018-7600。

    千里百科

    Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。其中Framework是指Drupal内核中的功能强大的PHP类库和PHP函数库,以及在此基础上抽象的Drupal API。Drupal综合了强大并可自由配置的功能,能支持从个人博客(Personal Weblog)到大型社区驱动(Community-Driven)的网站等各种不同应用的网站项目,应用十分广泛。并且Drupal的代码在安全性、健壮性上具有世界最高水平,使得国外包括美国白宫、美国商务部、纽约时报、SONY等多家政府以及机构采用建站,在国内,也有许多高校采用Drupal来建设网站。

    漏洞描述

    根据Drupal官方公告得知,Drupal 6.x、Drupal 7.x、Drupal 8.x均受此漏洞影响。据Drupal官方数据统计,全球有超过100万个网站正在使用Drupal,占已知CMS网站的大约9%,所以此漏洞的影响范围十分大。同时,该漏洞的利用难度几乎为零,攻击者不需要任何登录信息,只需要访问网站页面便可利用漏洞访问所有非公开数据或者控制使用Drupal站点。

    从官方最新更新的版本进行分析,我们可以看到在7.58版本中/includes添加了一个新的request-sanitizer.inc文件,以及更新了部分之前已经存在的.inc文件。其中request-sanitizer.inc的‘santize’功能可以接收用户通过GET、POST、cookie输入的数据,并替换掉威胁操作。

    其中,用于过滤危险操作的主函数是‘stripDangerousValues’函数,当输入数据是一个数组数据时,‘stripDangerousValues’函数用于检查数组中每个以#开头的参数的参数名。最终,函数将会把去除掉#的参数存入输入的数组中再返回到调用的函数中去。

    此漏洞问题在于Drupal中的Drupal core可以接收数组对象作为响应参数,攻击者可以通过使用带有payload的数组参数来进行攻击,当然,这些数组没有经过过滤的。

    漏洞复现

    上面描述的可能过于专业化,我们准备了一个案例让各位小伙伴们直观的了解一下。

    由于触发此漏洞的前提是:

    使用了低版本的Drupal cms

    据此搭建一套Drupal 8.4.5的运行环境。

    image.png直接进入创建新账号界面(http://xxx.xxx.xxx.xxx/user/register)

    image.png由于email字段在传入参数的时候不会进行清理,所以攻击者可以构造一个携带恶意指令的数组。利用AJAX API调用的方式进行email数组提交,从而执行构造好的恶意代码。

    image.png

    从上面的截图我们可以看见,在传入构造好的数组之后,得到了一个执行过id指令的应答包,说明攻击者的构造的数组已经成功发起攻击,并且攻击成功。

    根据这种攻击方式,我们可以清空所有通过hash标志传入键值的数组来进行防御(此方法已经在官方补丁中使用,请大家尽快升级)

    影响版本

    Drupal 6

    Drupal 7

    Drupal 8

解决方案

Drupal 6.x的修复参考以下网站:

https://www.drupal.org/project/d6lts

Drupal 7.x请升级到Drupal 7.5.8版本,

同时官方给出7.X补丁,若用户无法立即升级版本,请更新补丁,补丁地址为:

https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5

Drupal 8.5.x请升级到Drupal 8.5.1版本

同时官方给出8.5.X补丁,若用户无法立即升级版本,请更新补丁,补丁地址为:

https://cgit.drupalcode.org/drupal/rawdiff/?h=8.5.x&id=5ac8738fa69df34a0635f0907d661b509ff9a28f

Drupal 8.3.x和8.4.x版本官方已不进行维护,但此漏洞非常严重,官方此次也给出了对应补丁,补丁同8.5.x版本:补丁地址为:

https://cgit.drupalcode.org/drupal/rawdiff/?h=8.5.x&id=5ac8738fa69df34a0635f0907d661b509ff9a28f

由于Drupal 8.3.x和8.4.x版本官方已不进行维护,建议用户最好升级到官方维护的Drupal 8.3.9以及Drupal 8.4.6版本

深信服解决方案

1、深信服 “云眼” 检测系统已同步更新针对此高危风险的检测功能,不清楚资产是否受影响的用户,请提交域名到 “云眼” 平台在线检测获取结果。

检测地址:https://saas.sangfor.com.cn/

2、深信服防火墙用户可直接升级安全防护规则到20180425及其以上版本,可轻松防御针对此漏洞的攻击。