CVE-2018-7600: Drupal核心远程代码执行漏洞分析报告
2018-04-13 20:06

enter image description here

报告编号: B6-2018-041301

报告来源: 360-CERT

报告作者: 360-CERT

更新日期: 2018-04-13

0x00 漏洞概述

日前,360-CERT监测到编号为CVE-2018-7600的Drupal远程代码执行漏洞的相关细节被发布。该漏洞最早于3月28日Drupal官方披露,但未公开相关漏洞细节,360-CERT及时发布预警报告并进行跟进。2018年4月13日,checkpoint安全团队发布了一份关于此漏洞(CVE-2018-7600)相关技术细节报告;目前相关漏洞利用代码已公开。

Drupal是一款开源的PHP内容管理系统,使用广泛,全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等)使用。360-CERT认为此漏洞影响严重,且PoC可能会在短时间内被大量传播利用,建议使用Drupal开源内容管理系统的用户尽快进行更新。

0x01 PoC分析及技术细节

漏洞详情

Drupal Render API对于#会进行特殊处理。

其中#pre_render在render之前操作数组,#post_render接收render的结果并在其添加包装,#lazy_builder用于在render过程的最后添加元素。
由于对于部分#属性数组值,Drupal会通过call_user_func的方式进行处理,导致任意代码执行。

enter image description here

漏洞触发流程

core\modules\file\src\Element\ManagedFile.php中,应用使用uploadAjaxCallback对用户请求form进行处理,获取其中带有#的特殊变量

enter image description here

getValue函数,遍历form 获取带有 # 属性的变量

enter image description here

doRender中调用call_user_func造成了任意代码执行

enter image description here

调用栈如下

enter image description here

0x02 补丁分析及相关说明

补丁分析

最新版本对于请求GET、POST、COOKIE 进行了过滤处理

enter image description here

对所有带有#的数组输入进行了检查和过滤

enter image description here

相关说明

对于Drupal 8.X 版本,可直接利用PoC进行远程代码执行攻击。

对于Drupal 7.X 版本,由于未找到相关上传点,目前PoC不可用。

0x03 时间线

2018-03-21 Drupal 官方发布公告将会在下周修复高危漏洞

2018-03-28 Drupal 官方发布补丁和安全公告

2018-03-29 360-CERT发布预警通告

2018-04-12 checkpoint安全团队发布相关漏洞细节

2018-04-13 360-CERT发布漏洞分析报告

0x04 参考链接

  1. https://research.checkpoint.com/uncovering-drupalgeddon-2/

  2. https://cert.360.cn/warning/detail?id=3d862f150b642421c087b0493645b745

  3. https://www.drupal.org/sa-core-2018-002

  4. https://paper.seebug.org/567/

  5. http://mp.weixin.qq.com/s/ODSPCsZ6OSdsSjCUmqasbA