freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Drupal SA-CORE-2019-003远程命令执行分析
2019-02-25 15:30:59

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

一、漏洞背景

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

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

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

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

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

二、漏洞定位

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

根据commit log( https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5 )可以定位到漏洞的触发原因在于反序列化的操作:

01.png

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

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

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

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

04.png

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

三、触发点构造

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

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

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

05.png 设置允许匿名用户利用POST来访问/user/register:

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

07.png

Shortcut的_links.type为:http://127.0.0.1/rest/type/shortcut/default

向/user/register发送POST请求,同时在PHPStorm内将断点下在core\modules\hal\src\Normalizer\FieldItemNormalizer.php的denormalize函数:

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

09.png

验证视频:

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

验证.gif

四、安全建议

修复方案如下:

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请求。

*本文作者:云鼎实验室,转载请注明来自FreeBuf.COM

# drupal # 远程命令执行
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录