【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

admin 2022年4月3日16:58:50评论4 views字数 2991阅读9分58秒阅读模式

漏洞环境搭建参考:

  • https://k21academy.com/oracle-accesss-manager/oracle-access-manager-12c-12-2-1-3-0-download-installation-part/

  • https://k21academy.com/oracle-accesss-manager/oracle-access-manager-12c-rcu-configure-domain-12-2-1-3-0-part2/

在这篇文章中,我将详细介绍 OAM 12c 版本中的漏洞。使用 OAM 11g 版本,将需要更复杂的条件来 RCE。

让我们首先看一下由oracle.security.am.pbl.transport.http.AMServlet类处理的 URL 路由/oam/server/opensso/sessionservice

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

AMServlet.doPost()并没有做太多的工作,它只是调用 handleRequest() 然后调用 PBLFlowManager.processRequest() 来处理传入的请求:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

PBLFlowManager.processRequest() 中,我们传入的 URI /oam/server/opensso/sessionservice 映射到一个名为 OPENSSO_CHECK_VALID_SESSION 的事件名称(eventName):

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

接下来,根据给定的 eventName 创建一个 EventHint,然后使用该 eventHint 从映射中获取 requestHandler:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

在这种情况下,requestHandlerAgentRequestHandler 的一个实例,还有一个更大的这些处理程序URL映射的列表:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

PBLFlowManager.handleBaseEvent() 中,请求流分为两部分:

  • 第一部分:调用requestHandler.process()解析、验证传入的XML数据

  • 第二部分:调用PBLFlowManager.delegateToMasterController()处理当前请求的逻辑特性

在第一部分,AgentRequestHandler.process() 将调用 handleXMLRequest() 将传入的数据解析为 XML 数据:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

成功将数据解析为 XML 请求后,该方法继续跳转到 AgentRequestHandler.handleRequest()

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

要通过 isValid() 方法,传入的请求必须遵循以下形式:

<?xml version=”1.0" encoding=”UTF-8" standalone=”yes”?>
 <RequestSet vers=”vers123" svcid=”session” reqid=”req_1”>
   <Request dtdid=”dtd1" sid=”sid1">
     Data
   </Request>
 </RequestSet>

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

然后,它将使用参数serviceId(可控)调用 getServiceHandler()

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

serviceHandler类型的svcid 有 4 种类型:

  • NamingServicecom.iplanet.am.naming

  • AuthXMLHandlerauth

  • SessionRequestHandlersession

  • PolicyXMLHandlerpolicy

在这里,我们专注于 SessionRequestHandler

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

确定SessionRequestHandler后,AgentRequestHandler.handleRequest()会继续调用我们给定的sessionHandler.process(),现在是SessionRequestHandler.process()

SessionRequestHandler.process() 中,它将从名为Request的 xml 标记中获取数据,并将该数据再次解析为 XML 数据:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

只需注意 SessionRequestParser.parseXML(),如果传入的 xml 请求包含名为requester的属性,则其数据将被 base64 解码并设置为名为Requester的属性:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

此时,我们的请求数据如下所示:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

看这个分析文章听起来很直接,但构造完成这些数据并不容易!

成功解析传入的 XML 数据后,我们继续第二部分分析,PBLFlowManager.handleBaseEvent() 将继续调用 delegateToMasterController() -> MasterController.process() -> MasterController.processRequest() -> OpenssoEngineController.processEvent(),这是调用栈帧:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

OpenssoEngineController 由上面提到的给定 EventHint 确定。

OpenssoEngineController.processEvent() 中,有一个 switch case 语句来处理每种事件类型,在我们的例子中,它是 OPENSSO_CHECK_VALID_SESSION

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

跟随这个分支,我们将看到对 OpenssoEngineController.unmarshal() 方法的调用,并带有给定的“requester”变量:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

这是 unmarshal() 方法的内容:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

我们可以很快看出,如果“requester”变量的形式是object:<base64 data>,那么这个数据会直接反序列化,不做任何过滤。

这就是这个漏洞的来源,长话短说,请求是这样的:

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

OAM 建立在 weblogic 之上,并且 OAM 的类加载器还包含 weblogic 的库。所以是的,我们可以使用一些 weblogic gadgetchain 来RCE。

在尝试了许多旧的gadgetchain之后,我们发现CVE-2020-14644 gadgetchain仍然没有被全局序列化过滤器阻止。而我们最终的 PoC 也使用了这个gadgetchain来获得RCE!

【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)

在为OAM 12c打上最新补丁后,该漏洞poc失效了。起初,我们认为 Oracle 已经知道这个漏洞并设法修补它。在查看补丁并检查旧版本后,我们知道他们并没有修补该漏洞。

原因是:在最近的 OAM 12c 补丁中,他们放弃了对 OpenSSO 的支持,因此入口点/oam/server/opensso/sessionservice也被意外删除了。但在 OAM 11g 中仍然适用,我们发现易受攻击的入口点仍然存在于完全更新的 OAM 11g 中。

在 OAM 11g 中,CVE-2020-14644 的gadget不存在,因此需要更多的工作来构建gadget。

Weblogic 10.3.6 和 OAM 11g 已经停产,2022 年 1 月 1 日之后没有针对它们的补丁。

这意味着:在 OAM 11g 中,此 Pre-Auth RCE 没有补丁。

漏洞分析文章翻译自:

https://testbnull.medium.com/oracle-access-manager-pre-auth-rce-cve-2021-35587-analysis-1302a4542316

原文始发于微信公众号(信安文摘):【安全记录】- Oracle Access Manager前台RCE (CVE-2021–35587)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月3日16:58:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【安全记录】- Oracle Access Manager前台RCE (CVE-2021-35587)https://cn-sec.com/archives/866824.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息