专栏首页云鼎实验室的专栏Drupal SA-CORE-2019-003 远程命令执行分析

Drupal SA-CORE-2019-003 远程命令执行分析

0. 漏洞背景

2 月 20 日 Drupal 官方披露了一个 Drupal 的远程命令执行漏洞:

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

漏洞的触发条件为开启了 RESTful Web Services,且允许 POST / PATCH 请求。

根据 Drupal 的配置,此漏洞可能不需要任何权限即可触发,但普适性不高。一旦该漏洞被利用,攻击者则可以直接在 Web 服务器上执行任意 PHP 代码,造成服务器被入侵、用户信息泄露等后果。

腾讯云不受该漏洞影响,此漏洞爆发后,腾讯云安全团队第一时间进行跟踪分析,且对云上客户进行预警通知。

1. 漏洞定位

漏洞通告指出了 Drupal 8 在开启了 RESTful Web Services 模块,同时允许了 PATCH / POST 方法请求后,可以造成代码执行漏洞。

根据 commit log [注1] 可以定位到漏洞的触发原因在于反序列化的操作:

可以推测应该是在进行 REST API 操作的过程中,options 参数的内容带入到 unserialize 函数导致的。通过 diff 可以发现 LinkItem.php 和 MapItem.php 都受到影响,这里从 LinkItem 来向上挖掘漏洞点。

查看

core\modules\link\src\Plugin\Field\FieldType\LinkItem.php:

梳理了其整个调用链,从 REST 请求开始,先通过用户传入的 JSON 的 _links.type 获取了其对应的 Entity,再获取 Entity 内的 Fields 列表,遍历这个列表得到 key,从用户传入的 JSON 内取出 key,拼接成为 field_item:key 的形式(过程略),最终在 getDefinition 内查找了 definitions 数组内的字段定义,得到一个对应的 Field 的实例对象,过程大体如下:

接着 FieldNormalizer 的 denormalize 方法调用了 Field 的 setValue 方法。

也就是说,我们如果可以将 $field_item 控制为 LinkItem 或者 MapItem,即可触发反序列化。

2. 触发点构造

我们在 Drupal 后台配置好 RESTful Web Service 插件,选择一个可以进行 POST 的操作。

为了尽可能模拟网站管理员的配置,我们这里允许对于 /user/register 的 POST 操作。

于情于理,用户注册处必然可以作为匿名用户来进行操作。开启 /user/register :

设置允许匿名用户利用 POST 来访问 /user/register 。

上文中提到,我们需要一个 Entity 内存在 LinkItem Field。通过对 Entity 的查找,定位到 MenuLinkContent 和 Shortcut 使用了 LinkItem,利用 Shortcut 来进行进一步的测试。

Shortcut 的 _links.type 为:

http://127.0.0.1/rest/type/shortcut/default 。

向 /user/register 发送 POST 请求,同时在 PHPStorm 内将断点下在

core\modules\hal\src\Normalizer\FieldItemNormalizer.php 的 denormalize 函数:

可以发现,在调用 setValue 方法的现场,$field_item 为 LinkItem。跟入 setValue 方法(图 2),根据逻辑,如果 $values 为一个数组。且 $values['options'] 存在,那么就执行反序列化操作。我们修改 payload 为即可触发反序列化。

验证视频:

攻击者利用此反序列化可以在服务器上执行任意代码,利用此漏洞在服务器上弹出计算器的视频如下:

3. 安全建议

修复方案如下:

1. Drupal 8.6.x 版本升级到 8.6.10 版本

2. Drupal 8.5.x 或更早期版本版本升级到 8.5.11 版本

3. Drupal 7 暂无更新

缓解措施如下:

1. 禁用 RESTful Web Services 模块

2. 配置服务器不允许 POST/PATCH 请求

注1:

https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5

本文分享自微信公众号 - 云鼎实验室(YunDingLab)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安全报告 | SSH 暴力破解趋势:从云平台向物联网设备迁移

    云鼎实验室
  • 【内有福利】真实云上攻防10.24开战,探索产业安全新边界

    你可能听说过给手机、电脑、智能设备、甚至智能网联汽车找漏洞,给云服务“挖”漏洞的比赛,见过吗? 云计算在现实世界正在扮演者越来越重要的角色,用户衣食住行的背后...

    云鼎实验室
  • 漏洞分析 | Dubbo2.7.7反序列化漏洞绕过分析

    北京时间2020-6-22日Apache官方发布了Dubbo 2.7.7版本,其中修复了一个严重的远程代码执行漏洞(CVE-2020-1948),这个漏洞是由...

    云鼎实验室
  • 新发现Yahoo邮箱存在XSS漏洞,4千万邮箱用户面临威胁

    美国时间1月6日,Youtube上出现一个名为Yahoo Mail Hacking 2013的视频,展示了利用XSS漏洞,获取受害人Yahoo邮箱的权限。视频是...

    FB客服
  • jmeter安装配置教程及使用

    因为双11,黑五快到了,所有的互联网电商行业都要做一件事情,那就是压测,常见的压测很多区分,接口压测和全链路压测、线上压测和线下压测,单元压测和功能压测。我们这...

    爱撸猫的杰
  • SVG 使用

    SVG即Scalable Vector Graphics可缩放矢量图形,使用XML格式定义图形, 主要优势在于可缩放的同时不会影响图片的质量。 SVG 在htm...

    用户1197315
  • D3.js-基础知识

    数据可视化起源于18世纪,当时使用柱形图和折线图来表示国家进出口量。近年,随着大数据时代的到来,数据可视化作为大数据量的呈现方式,成为当前重要的课题。数据可视化...

    奋飛
  • 宋宝华:Don Libes的expect,终端交互式编程的精神鼻祖

    如果你在期待一种编程语言,可以自动在terminal里面输入命令,并且等待terminal的输出结果,之后判断输出是否如你期待(expect),并根据termi...

    Linux阅码场
  • 什么是Photon?

    Photon就是以前SmartMesh生态的SmartRaiden,Photon network是Spectrum的链下扩展解决方案,能够实现即时、低费用和可扩...

    rectinajh
  • 清华大学开源迁移学习算法库:基于PyTorch实现,支持轻松调用已有算法

    清华大学大数据研究中心机器学习研究部长期致力于迁移学习研究。近日,该课题部开源了一个基于 PyTorch 实现的高效简洁迁移学习算法库:Transfer-Lea...

    机器之心

扫码关注云+社区

领取腾讯云代金券