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-2018-7600 Drupal核心远程代码执行漏洞分析的更多相关文章
- [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...
- Spring框架的反序列化远程代码执行漏洞分析(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- thinkphp5.0.22远程代码执行漏洞分析及复现
虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...
- CVE-2012-1876Microsoft Internet Explorer Col元素远程代码执行漏洞分析
Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WEB浏览器. Microsoft Internet Explorer 6至9版本中存在漏 ...
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
[CNNVD]Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞(CNNVD-201201-110) Microsoft Wi ...
- Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现
0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...
- phpMoadmin CVE-2015-2208 远程代码执行漏洞分析
原文:http://www.thinkings.org/2015/03/05/cve-2015-2208-phpmoadmin-exec-vul.html phpMoAdmin 是一个用PHP 开发的 ...
- Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)
周五下午爆洞能不能让人们好好休个周末! 分析过程 本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控 ...
随机推荐
- HDU-6156 Palindrome Function(数位DP)
一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...
- Custom Exception in ASP.NET Web API 2 with Custom HttpResponse Message
A benefit of using ASP.NET Web API is that it can be consumed by any client with the capability of m ...
- POI导出Excel和InputStream存储为文件
POI导出Excel和InputStream存储为文件 本文需要说明的两个问题 InputStream如何保存到某个文件夹下 POI生成Excel POI操作utils类 代码如下.主要步骤如下: ...
- Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool
1.安装JBoos Tool Help -> Install new Software 然后添加: http://download.jboss.org/jbosstools/updates/de ...
- lookup 控件
lookup->ADOQuery->Connection = DataModule1->ADOConnection1; lookup->ADOQuery->SQL-> ...
- 7 MySQL--记录的增删改查
MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的DML语言 ...
- 【335】Install PyDev in Eclipse IDE
Reference: Eclipse和PyDev搭建完美Python开发环境(Windows篇) Reference: Install the PyDev plug-in for Eclipse Do ...
- Api2Doc生成 Restful API 文档
1,引入maven <dependency> <groupId>com.github.terran4j</groupId> <artifactId>te ...
- SO_KEEPALIVE选项
[SO_KEEPALIVE选项 ] 对于面向连接的TCP socket,在实际应用中通常都要检测对端是否处于连接中,连接端口分两种情况: 1.连接正常关闭,调用close() shutdown()连接 ...
- 表达式SpEL方式的属性注入
-----------------------siwuxie095 表达式 SpEL 方式的属性注入 表达式 SpEL 方式的属性注入是 Spring 3.x 版本后提供的方式 1.编写一个普通类 B ...