CVE-2018-7600 Drupal核心远程代码执行漏洞分析
0x01 漏洞介绍
Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等)使用。两周前,Drupal安全团队披露了一个非常关键的漏洞,编号CVE-2018-7600 Drupal对表单请求内容未做严格过滤,因此,这使得攻击者可能将恶意注入表单内容,此漏洞允许未经身份验证的攻击者在默认或常见的Drupal安装上执行远程代码执行。
0x02 漏洞分析
Drupal渲染数组的情况有页面加载和Ajax表单发出的请求,在这里Ajax API调用是攻击者最佳的选择。那么作为用户注册表单的一部分,图片字段使用Ajax API将图片上传到服务器,并且生成缩略图
查阅了相关文档资料现在,我们所要做的就是注入一个恶意渲染数组,该数组使用Drupal的渲染回调方法在系统上执行代码。有几个属性我们可以注入:
#access_callback 标签虽然callback回调函数可控,但需要回调处理的字符串不可控,导致无法利用。以下场景以post_render和lazy_builder为例
2.1、漏洞场景1:引入#post_render
#post_render
这个API标签可以被所有的元素和表单使用,它是在drupal_render()方法中调用,可以渲染当前元素和子元素,也可对内容进行修改。
例子中$ element通过调用admin_form_html_cleanup函数处理返回处理后的结果。再来看可以触发攻击载荷的代码,在渲染的过程中调用了call_user_func进行回调处理,但$callable 回调函数通过表单伪造,$elements的子元素同样也是通过表单可控
攻击者利用攻击载荷 mail[#post_render][]=passthru&mail[#type]=markup&mail[#markup]=whoami ,这里的#markup是当前元素#type的子元素,通过数组的方式传入值,执行过程如图
魔术方法__toString得到$this->string 等于whoami ,带入到call_user_func中交给passthru函数执行,导致漏洞触发
PHP内置函数pasthru执行后会回显结果
2.2、漏洞场景2:引入#lazy_builder
#lazy_builder 可选,数组值,必须有且只有两个元素,一个是回调函数名,一个回调的参数,参数只能是NULL或者标量类型
$callable变量取#lazy_builder元素标签数组下标0的值作为回调函数名,取数组下标1的值当回调方法的参数, 下面攻击载荷调用PowerShell 远程下载文件到本地保存为php网页后门,代码如下图
我们传入的lazy_builder[0]和lazy_builder[1]的值在渲染的时候用call_user_func_array完成整个攻击过程
整个漏洞的产生过程都是因为call_user_func或者call_user_func_array等回调函数导致的任意代码执行,API元素标签中可能还会触发漏洞的标签有#theme 、#create_placeholder、#theme_wrappers等等。
0x04 缓解措施
官方在最新版本8.5.1中增加了下图方法
对请求的GET、POST、COOKIE 进行过滤处理
希望广大用户尽快升级到最新版本Drupal 8.5.1 , 下载地址:https://www.drupal.org/project/drupal/releases/8.5.1
0x05 Reference
https://research.checkpoint.com/uncovering-drupalgeddon-2/
https://github.com/g0rx/CVE-2018-7600-Drupal-RCE/blob/master/exploit.py
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
- 【漏洞通告】Weblogic 反序列化远程代码执行高危漏洞 (CVE-2018-2628)
- CVE-2012-1876Microsoft Internet Explorer Col元素远程代码执行漏洞分析
- 技术文章 | CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞分析报告
- Samba远程崩溃或代码执行漏洞(CVE-2015-0240)简要分析
- ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析
- Smarty <= 3.1.32 PHP代码执行漏洞分析—【CVE-2017-1000480】
- Spring框架的反序列化远程代码执行漏洞分析(转)
- 某远程代码执行漏洞影响超过70个不同的CCTV-DVR供应商的漏洞分析
- ElasticSearch远程随意代码运行漏洞(CVE-2014-3120)分析
- Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- IIS 6.0远程代码执行漏洞(CVE-2017-7269)
- WordPress 'is_serialized()'远程任意代码执行漏洞(CVE-2013-4338)
- Microsoft Edge 浏览器远程代码执行漏洞POC及细节(CVE-2017-8641)
- Node.js 反序列化漏洞远程执行代码(CVE-2017-5941)
- Bash Shellshock(Bash远程代码执行)漏洞分析及利用思路
- Apache SpamAssassin 任意代码执行漏洞(CVE-2018-11781)
- Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补