【漏洞预警】GET方法也能触发漏洞,Drupal 8 远程代码执行漏洞预警

  • 来源:深信服安全中心
  • 发布时间:2019-02-25
#

事件描述

在2019年2月20日,Drupal官方团队在最新的安全更新中披露了一则Drupal 8 远程代码执行漏洞公告(SA-CORE-2019-003,CVE-2019-6340)。漏洞官方定级为Highly critical,评分21/25,属于最严重级别漏洞。该漏洞本质上是由于用户使用Drupal Core RESTful Web Services (rest)时,某些字段类型无法正确清理非格式源中的数据。在某些情况下,这可能导致任意PHP代码执行。攻击者可利用该漏洞在服务器上执行任意PHP代码,从而实现完全远程接管服务器的目的。

深信服安全团队第一时间响应并发布预警信息,并将持续跟踪事态进展。

深信服安全团队风险评级:高危

二、漏洞概要

微信截图_20190225201335.png

Drupal 组件介绍

Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。其中Framework是指Drupal内核中的功能强大的PHP类库和PHP函数库,以及在此基础上抽象的Drupal API。Drupal综合了强大并可自由配置的功能,能支持从个人博客(Personal Weblog)到大型社区驱动(Community-Driven)的网站等各种不同应用的网站项目,应用十分广泛。

Drupal的代码在安全性、健壮性上具有世界最高水平,使得国外包括美国白宫、美国商务部、纽约时报SONY等多家政府以及机构采用建站,在国内,也有许多高校采用Drupal来建设网站。

漏洞描述

Drupal Core存在一个远程代码执行漏洞。此次,它的目标是Drupal 8的REST模块,默认情况下,该模块是禁用了,但是该模块在大多数情况下会被用户使用。该漏洞本质上是由于用户使用Drupal Core RESTful Web Services (rest)时,某些字段类型无法正确清理非格式源中的数据。在某些情况下,这可能导致任意PHP代码执行。此外,我们发现针对该漏洞提出的即时补救措施是不完整的,这可能会导致一种错误的安全感。用户可能会根据官方的说明禁用掉RESTful Web Services 中的POST/PATCH方法,但是事实上GET方法也能在无任何权限的情况下执行远程代码,所以用户必须执行Drupal的最新的安全更新或者禁用RESTful Web Services服务,否则网站依旧处于风险当中。

漏洞分析

通过分析Drupal 8.6.9到Drupal 8.6.10的补丁,我们可以发现,在REST模块中,FieldItemNormalizer现在使用了一个新的特性SerializedColumnNormalizerTrait。 此特性提供了checkForSerializedStrings()方法,如果为存储为序列化字符串的值提供了字符串,则该方法会引发异常。这处更新表明:通过REST请求,攻击者需要发送序列化属性。此属性稍后将会被反序列化unserialize(),那么我们可以使用PHPGGC等工具轻松利用。 

图片1.png

另一个更新的文件给出了可以使用哪个属性的指示:LinkItem现在使用unserialize($ values ['options'],['allowed_classes'=> FALSE]); 而不是标准的反序列化($ values ['options']);.

图片2.png 对于所有FieldItemBase子类,LinkItem引用type属性。 对于名为link的属性,shurtcut使用此属性类型。

所以我们需要触发反序列化,根据以下元素,可以轻松触发反序列化。

GET /drupal-8.6.9/node/1?_format=hal_json HTTP/1.1

Host:

Content-Type: application/hal+json

Content-Length: 642

 

{

  "link": [

    {

      "value": "link",

      "options": ""

    }

  ],

  "_links": {

    "type": {

      "href": "http://siteserver/drupal-8.6.9/rest/type/shortcut/default"

    }

  }

}

所以,只要我们在option参数中放入反序列化Payload,即可触发该漏洞。

漏洞复现

我们首先在后台配置好RESTful Web Services服务,然后使用构造好的payload攻击Drupal 网站,最终执行命令。

图片3.png影响范围

目前据统计,在全球范围内对互联网开放Drupal网站的资产数量多达1489923台,其中归属中国地区的受影响资产数量为4万以上。

目前受影响的Drupal版本:

Drupal 8.6.x < 8.6.10

Drupal 8.5.x < 8.5.11

参考链接

https://www.drupal.org/sa-core-2019-003

https://www.ambionics.io/offers

解决方案

深信服解决方案

深信服安全云在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。

注册地址:

http://saas.sangfor.com.cn

深信服下一代防火墙可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。

深信服云盾已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。

修复建议

Drupal官方已经在 Drupal 8.6.10以及8.5.11更新了安全补丁,用户可以更新至Drupal 8.6.10或者8.5.11的版本:

Drupal 8.6.10下载地址:https://www.drupal.org/project/drupal/releases/8.6.10

Drupal 8.6.11下载地址:https://www.drupal.org/project/drupal/releases/8.5.11

如果用户不需要使用RESTful Web Services服务,可直接关闭该服务,若只禁用服务中的POST或者PATCH方法,网站依旧处于风险之中。