Drupal 远程代码执行误差清静通告
宣布时间 2019-02-22误差编号和级别
CVE编号:CVE-2019-6340,危险级别:严重, CVSS分值:官方未评定
影响规模
受影响版本:
误差影响Drupal 8.6.x、Drupal 8.5.x 及 Drupal 7中的部分组件。详细版本信息如下:
Drupal 8.6.9 及以下版本
Drupal 8.6.10 及以下版本
影响组件
RESTful Web Services
JSON:API
Link
Metatag
Video
Paragraphs
Translation Management Tool
Font Awesome lcons
误差概述
2月20日,Drupal 官方披露了一个 Drupal 的远程下令执行误差,误差是由Drupal 未对RESTful Web的数据举行严酷效验造成。若是网站开启了RESTful Web服务,并且接受PATCH 、POST请求,或站点中开启了其他web服务�?�,将会泛起反序列化问题,进而造成代码执行。
凭证Drupal 的设置,此误差可能不需要任何权限即可触发。可是若是被使用,攻击者则可以直接在Web服务器上执行恣意PHP代码,造成服务器被入侵、用户信息泄露等效果。
RESTful 服务默认不开启,大大降低误差危害。为清静起见,建议使用Drupal 的用户实时举行版本升级。
误差细节
1. 误差定位
误差通告指出了 Drupal 8 在开启了 RESTful Web Services �?�,同时允许了 PATCH / POST 要领请求后,可以造成代码执行误差。
凭证 commit log(https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5)可以定位到误差的触发缘故原由在于反序列化的操作:
可以推测应该是在举行 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 内将断点下在
ore\modules\hal\src\Normalizer\FieldItemNormalizer.php 的 denormalize 函数:
可以发明,在挪用 setValue 要领的现场,$field_item为LinkItem。跟入setValue 要领,凭证逻辑,若是$values为一个数组。且$values['options']保存,那么就执行反序列化操作。我们修改payload为即可触发反序列化。
攻击者使用此反序列化可以在服务器上执行恣意代码。
修复建议
修复计划如下:
Drupal 8.6.x版本升级到8.6.10
Drupal 8.5.x或更早期版本版本升级到8.5.11版本
Drupal 7暂无更新
缓解步伐如下:
禁用RESTful Web Services�?�
设置服务器不允许POST/PATCH请求
参考链接
https://www.drupal.org/sa-core-2019-003


京公网安备11010802024551号