专栏首页绿盟科技安全情报【漏洞预警】Drupal访问绕过漏洞(CVE-2019-6342)预警通告

【漏洞预警】Drupal访问绕过漏洞(CVE-2019-6342)预警通告

预警编号:NS-2019-0027

2019-07-19

TAG:

Drupal、访问绕过、CVE-2019-6342

危害等级:

中,攻击者利用此漏洞可绕过认证,任意添加文章。

版本:

1.0

1

漏洞概述

近日,Drupal官方发布安全通告修复了一个访问绕过漏洞(CVE-2019-6342)。在Drupal 8.7.4中,当启用实验性工作区模块(experimental Workspaces module)时,将为攻击者创造访问绕过的条件。Drupal官方将该漏洞定级为严重(Critical)。

参考链接:https://www.drupal.org/sa-core-2019-008

SEE MORE →

2影响范围

受影响版本

  • Drupal 8.7.4

不受影响版本

  • Drupal 8.7.5
  • Drupal < 8.7.4
  • Drupal 8.6.x

3漏洞检测

使用Drupal的用户,可通过查看当前版本来确定是否受该漏洞影响,登录后台后,依次点击“管理”-“日志”-“报告状态”,即可查看当前的应用版本,如果版本为8.7.4,则存在风险。

4漏洞防护

4.1 官方升级

Drupal官方已经发布新版本修复了该漏洞,请受影响的用户访问以下链接进行升级:

https://www.drupal.org/project/drupal/releases/8.7.5

4漏洞分析

4.1 漏洞复现

安装Drupal 8.7.4版本,登录管理员账户,进入后台/admin/modules,勾选Workspaces模块并安装。

在页面上方出现如下页面则安装成功,管理员可以切换Stage模式或者Live模式。

另外开启一个浏览器访问首页(未登录任何账户),访问http://127.0.0.1/drupal-8.7.4/node/add/article,可直接添加文章,无需作者或管理员权限。

4.2 漏洞分析

Workspaces是Drupal 8.6核心新增的实验模块,主要功能是方便管理员一次性发布/修改多个内容。

Workspaces有两种模式,分别为Stage模式和Live模式,,默认为Live模式,两者的区别在于:

· Stage模式下修改内容不会及时更新,所有文章修改完毕后管理员可以通过“Deploy to Live”发布到实际环境,相当于一个暂存区;

· Live下更新是即时的,发布后站点内容立即更新。

在这两种模式下,由于编码失误导致存在一个缺陷:匿名用户无需登录即可创建/发布/修改/删除文章,问题点出现在权限鉴定模块EntityAccess下。

当用户发起请求时,会根据当前操作回调相关权限检查模块对当前用户权限进行检查,请求调用为事件监听器(EventListener)的RouterListener类,在其onKernelRequest()方法中调用AccessAwareRouter类的matchRequest()方法,随后调用AccessManager->checkRequest()方法,最后在AccessManager->performCheck()方法中通过call_user_func_array回调对应的操作进入到具体的操作权限检查。

例如发布文章时回调的是access_check.node.add,相关方法在NodeAccessControlHandler控制器中定义,这个控制器继承自EntityAccessControlHandler,在父类的createAccess()方法中回调对应操作的create_access权限,过程中会拼接上模块名和相应钩子作为回调函数。

$function = $module . '_' . $hook

例如此处回调的是workspaces_entity_create_access()方法,进入到Workspaces中。

在调用entityCreateAccess()方法时有一个关键操作bypassAccessResult。

bypassAccessResult()方法是一个检查用户是否有“绕过节点访问权限(bypass node access)”的操作,是Workspaces中特有的,这个方法决定了“如果用户在各自的激活的工作区中,那么他将拥有所有权限”,这里的所有权限指文章相关的增删改操作。

这个权限虽然奇怪但确实是一个设计好的功能,正常操作应该在后台admin/people/permissions中配置好用户是否拥有这个权限,默认情况下匿名用户和认证用户都没有权限。

当开启了“Bypass content entity access in own workspace”权限后用户才可以在未登录的情况下发布/删除文章,而此次漏洞就绕过了这个配置,默认情况下进行了越权操作。

具体分析一下bypassAccessResult()的实现,整个过程返回的是AccessResultAllowed对象或者AccessResultNeutral对象,所谓“中立”是因为后续还可能会对结果再做判断,但在这个漏洞中其实就是access和forbidden的区别:

首先获取了当前激活的工作区,然后通过allowedIf判断当前用户是否有权限,随后这些数据存入缓存,包括缓存内容、缓存标签和过期时间。然后再经过一次allowedIfHasPermission判断,这个方法的作用是,如果权限不对就设置一个reason,在这个漏洞中没有起到作用,到目前为止权限校验都是正常的,在没有配置后台工作区匿名权限的时候,返回的是一个AccessResultNeutral对象,也就是“禁止”,接下来就是出现问题的地方。

$owner_has_access->orIf($access_bypass);

通过补丁可以发现漏洞就修补了这行语句,把orIf换成了andIf。

这两个方法的设计逻辑比较复杂,最主要的功能是对一个如果返回为“中立”的结果做后续判断,如果采用orIf方法合并,那么是否允许由调用者决定;如果以andIf方法合并,则被当做禁止。

具体到此次漏洞上的区别如下方图片所示:

· orIf()

返回的是AccessResultAllowed对象

· andIf()

返回的是AccessResultNeutral对象。

在检查完毕后会回到AccessAwareRouter->checkAccess()方法,在该方法中对返回结果进行了判断,AccessResultNeutral的isAllowed()因此会抛出异常

返回到页面上则是Access denied

相关调用栈为

Drupal\workspaces\EntityAccess->bypassAccessResult()Drupal\workspaces\EntityAccess->entityCreateAccess()…Drupal\Core\Extension\ModuleHandler->invokeAll()Drupal\node\NodeAccessControlHandler->createAccess()Drupal\node\Access\NodeAddAccessCheck->access()Drupal\Core\Access\AccessManager->performCheck()Drupal\Core\Routing\AccessAwareRouter->checkAccess()Drupal\Core\Routing\AccessAwareRouter->matchRequest()Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest()…DrupalKernel.php:693, Drupal\Core\DrupalKernel->handle()index.php:19, {main}()

4.3 总结

此次漏洞出现在设计过程的一个疏忽,在默认没有分配权限的情况下用户可以绕过权限检查进行发布/删除/修改文章操作,但由于该漏洞仅影响Drupal 8.7.4版本,并且需要开启Workspaces模块,这又是一个实验功能,默认不启用,因此漏洞影响减弱了不少,用户可以升级Drupal版本或者关闭Workspaces模块以消除漏洞影响。

END

作者:绿盟科技伏影实验室

声明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。

绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

本文分享自微信公众号 - 绿盟科技安全预警(nsfocus_secwarning),作者:绿盟伏影实验室

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

原始发表时间:2019-07-19

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2020年3月网络安全态势分析

    总体看三月份的新增漏洞呈上升趋势,新增高危漏洞113个,主要分布在微软、Adobe、Moxa、Videolabs实验室、VISAM、Siemens、Rockwe...

    绿盟科技安全情报
  • 【漏洞通告】V8类型混淆漏洞(CVE-2020-6418)通告

    2月25日,谷歌Chrome浏览器与微软Edge浏览器发布了安全更新,在Google Chrome浏览器80.0.3987.122以下与Microsoft Ed...

    绿盟科技安全情报
  • 【漏洞预警】Windows任意文件读取0day漏洞处置手册

    近日,国外安全研究员 SandboxEscaper又一次在推特上公布了新的Windows 0 day漏洞细节及PoC。这是2018年8月开始该研究员公布的第三个...

    绿盟科技安全情报
  • 被黑的Drupal网站被用来挖矿,传播远控,发送诈骗邮件

    两个漏洞编号为CVE-2018-7600和CVE-2018-7602的远程代码执行漏洞之前已经被Drupal开发人员修复。

    FB客服
  • Wi-Fi安全的未来:评估WPA3中的漏洞

    近期,安全研究专家Matty Vanhoef和Eyal Ronen对WPA3 Wi-Fi标准进行了一次安全分析研究,并成功从中发现了五个安全漏洞。其中,有四个安...

    FB客服
  • 专访“新世界黑客组织”成员Kapustkiy

    大数据文摘
  • 看我如何利用Drupal漏洞并通过恶意图片实现一键RCE

    近期,Drupal发布了两个针对7.x和8.x版本的关键漏洞修复补丁。攻击者可以利用这两个漏洞来实现远程代码执行,但他们首先要将恶意图片上传至远程服务器,并通过...

    FB客服
  • 机器学习重要算法-PCA主成分分析

    大家好,很高兴可以和大家一起来继续学习机器学习,这几天时间,我着重研究了下主成分分析法,不过因为其数学推理实在有些过于繁琐和复杂,我也没太搞得太清楚,如果在文章...

    云时之间
  • 微软发布针对SMBv3漏洞的安全更新,建议用户尽快安装

    微软发布了KB4551762安全更新,修复了在微软服务器消息块3.1.1(SMBv3)中发现的Windows 10 RCE漏洞。在2020年3月补丁星期二活动日...

    FB客服
  • 你需要知道的混合云最佳实践

    SDNLAB

扫码关注云+社区

领取腾讯云代金券