欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

看Orange Tsai如何利用四个Bug实现亚马逊协同平台的RCE漏洞

来源:本站整理 作者:佚名 时间:2018-08-20 TAG: 我要投稿


台湾白帽Orange Tsai(蔡政达)受邀前往本届  Black Hat USA  和 DEFCON 26发表议题演讲,在《Breaking Parser Logic! Take Your Path Normalization Off and Pop 0days Out》的演讲中,他分享了如何基于“不一致性”安全问题,综合利用4个功能性Bug,实现对亚马逊(Amazon)协同平台系统的远程代码执行。
以下是他的详细技术分享:
背景说明
在过去两年时间里,我重点在研究一些“不一致(inconsistency)”的安全问题,这是什么问题呢?这就有点类似我去年在 Black Hat 的演讲以及《GitHub SSRF to RCE》的研究一样,我先通过发现URL解析器和URL获取器之间的不一致问题,形成了整体SSRF绕过,最终实现更严重的漏洞利用。
另外,这篇由@0x09AL写的文章《Bypassing Web-Application Firewalls by abusing SSL/TLS》,也详细阐述了 “不一致“ 安全问题导致的重要漏洞,值得拜读。
有了之前的基础,今年我着重研究了路径解析器和规范化之间的不一致安全问题。理论上来说,因为不同对象实体具备不同的标准和实现需求,所以很难开发出一款设计严格而全面的解析器。但当解析器出现安全Bug时,为了不影响业务逻辑,研发上通常的做法是采用某种替代方法或是增加某种过滤器,而不是直接给Bug打补丁,最后的影响是治标不治本。所以,这样一来,如果过滤器和调用方法之间存在任何不一致问题,就可能轻松绕过系统本身设置的安全机制。
当我在阅读一些漏洞分析报告时,我注意到了一种叫”URL路径参数“( URL Path Parameter)的功能特性。一些研究人员已经指出,如果编程出现错误,这种特性可能会导致安全问题。通过点点滴滴的关联分析,我发现这种特性可以完美地应用在多层体系结构中,而且默认情况下,不必编码出错,就存在攻击面,可导致漏洞利用。如果你在反向代理中使用了Java后端服务,那么就可能存在这种漏洞!
早先在2015年时,我首先是在一次红队测试中发现了这种攻击面,之后,我觉得这个问题威力超强,也想看看安全圈内的知悉面,于是,我就在WCTF 2016比赛的自出题中设计了一道相关题目。
WCTF是由Belluminar和360共同举办的比赛,这与其他CTF比赛中的解题模式(Jeopardy)和攻防模式(Attack-Defense)不一样,它邀请了全球各国的前10名团队,每个团队都需要设计两道挑战题目,所以总共有20个挑战题目。你解题数量越多,你得到的点数就越多。然而,最后却没人能解出我出的这道题目。所以,那时我认为这种技术可能还并不为大多数人知晓。另外,我也对DirBuster、wFuzz、DirB 和 DirSearch这些扫描器作了测试,但只有DirSearch在2017年5月加入了这种扫描规则。
因此,今年我打算分享这个议题。但为了说服Black Hat 的审查委员会,我需要有力的用例支撑。所以,我又重拾挖洞,然而在测试中我发现,这种攻击面不仅可以造成敏感信息泄露,还能绕过访问控制列表(像我发现的这个优步OneLogin登录绕过漏洞),在某些漏洞众测项目中还能导致远程代码执行(RCE)。在这篇文章中,我就来介绍,利用这种 “不一致” 攻击面问题,综合4个功能Bug,实现对亚马逊协同平台的远程代码执行(RCE)。
多层架构的不一致性,可以形象的用以下图片来表示:

前言
首先,感谢亚马逊(Amazon)开放的漏洞披露策略,与亚马逊安全团队Nuxeo的合作非常顺畅,仅从漏洞上报进程来看,就可以看出亚马逊快速的漏洞响应速度,以及他们积极的应对措施。
开始我们要从网站 corp.amazon.com 说起,这貌似是亚马逊的一个内部协同系统,从网站的底部版权信息来看,该系统由开源项目Nuxeo部署构建。而Nuxeo又是一个庞大的Java项目,且刚开始我只是想提高一下我的Java审计技术。所以故事就从这里说起吧!
四个漏洞(Bug)
对我来说,当我拿到Java源码时,我首先会看看 pom.xml 配置文件,然后再去查找是否存在过期的引用包。在Java生态系统中,很多漏洞都像 OWASP Top 10 – A9 描述的组件漏洞那样,如涉及Struts2,、FastJSON、XStream等反序列化组件时,就可能存在漏洞
pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。
这里的Nuxeo项目中,初看貌似其中的包都是最新的,但我却发现了一个”老朋友“ – Seam框架。Seam是基于 JBoss 的web框架,隶属红帽Linux系统的分支,在早前几年非常流行,但现在仍然存在大量基于Seam的web应用。
我曾在2016年对Seam进行过审计,也发现了其中一些风险隐患,但最终在这里,貌似也无法直接照搬实现。我们先继续往下分析。
BUG 01:路径规范化错误导致的访问控制列表(ACL)绕过
当从WEB-INF/web.xml文件中查看访问策略时,我发现Nuxeo项目使用了一个通用的验证过滤器NuxeoAuthenticationFilter,并把/*类型目录映射到了这个过滤器上。这种验证机制下,大部份网页都需要进行验证,但也存在一个包含login.jsp这样页面的访问入口白名单,所有这些功能都由一个名为bypassAuth的方法来具体实现:
protected boolean bypassAuth(HttpServletRequest httpRequest) {
  
    // init unAuthenticatedURLPrefix
    try {
        unAuthenticatedURLPrefixLock.readLock().lock();
        String requestPage = getRequestedPage(httpRequest);
        for (String prefix : unAuthenticatedURLPrefix) {

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载