【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造

渗透技巧 3年前 (2022) admin
1,504 2 0


漏洞信息


Oracle Access Manager是Oracle公司出品的一款单点登陆认证管理系统。提供了基于Web的身份4管理,以及对运行于异类环境中的Web应用程序和资源的访问控制。它提供用户和组管理、委托管理、口令管理和自助服务功能,以便在复杂的、以目录为中心的环境中管理大量用户。


近日Oracle官方通报了Oracle Access Manager存在命令执行漏洞CVE-2021–35587:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造



这是一个匿名反序列化漏洞,下面给小伙伴们分享一下漏洞触发原理,并提供命令执行利用链和命令回显思路。


环境搭建


Oracle Access Manager搭建过程比较繁琐,经过无数次失败尝试,最终通过docker成功搭建Oracle Access Manager v12.2.1.4版本的研究环境(除了Oracle Access Manager之外,还需要搭建一个Oracle数据库,也通过docker方式完成)。Oracle Access Manager docker搭建可以参考:


Oracle Access Manager搭建

https://docs.oracle.com/en/middleware/idm/access-manager/12.2.1.4/tutorial-oam-docker/]


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


启动Admin Server:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


查看内置的Java版本为1.8.281:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


然后再启动Manage Server:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


为了方便分析,配置远程调试。与Weblogic一样,修改`bin/setDomainEnv.sh`添加调试设置:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


重新构建docker进程并启动:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


反序列化调用链分析


从公开信息来看,漏洞位于`AMServlet`接口:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


`AMServlet`接口位于`pbl.jar`:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


执行`AMServlet.handleRequest`:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


在`PBLFlowManager.processRequest`中根据请求URL`/oam/server/opensso/sessionservice`获取EVENT类型,每一个URL对应一个事件处理:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


接下来继续执行`PBLFlowManager.handleBaseEvent`,这个函数中有几个值得说明的点:


  • 首先根据`baseEventMint`的值,调用`getRequestHandler`获取处理Handler,最后获得处理类`AgentRequestHandler`;

  • 通过`requestHandler.process`执行`AgentRequestHandler.process`,用于检查输入的XML数据;

  • 继续执行`delegateToMasterController`,该函数最终会调用到`Unmarshell`危险反序列化函数。


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


首先来看`AgentRequestHandler.process`函数,它调用了`handleXMLRequest`验证XML数据:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


`handleXMLRequest`提取XML内容后调用`handleRequest`方法:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


接下来调用`isValid`验证数据合法性,然后调用`getServiceHandler`和`handler.process`:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


`isValid`检查数据中必须包含特定属性,值从XML数据中读取,示例请求如下:


<?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>


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


`getServiceHandler`返回处理接口,分为四种类型。这里调试的时候并不能执行到`new SessionRequestHandler`语句:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


接下来执行`SessionRequestHandler`函数继续处理XML数据:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


读取`requester`的值并base64解码:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


至此绕过了`Process`检查:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


接下来在`PBLFlowManager.handleBaseEvent`中调用执行:


delegateToMasterController    -> MasterController.process        -> MasterController.processRequest            -> OpenssoEngineController.processEvent


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


`ProcessEvent`函数包含一个很大的Switch语句,`OPENSSO_CHECK_VALID_SESSION`调用了`unmarshal`:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


`unmarshal`函数检查`requester`内容,当数据以`object:`开头时调用了`readObject`反序列化函数:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


漏洞利用链构造


Oracle Access Manager是基于Weblogic进行构建的,可以尝试直接利用Weblogic的反序列化利用链进行测试,分析发现存在黑名单过滤机制:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


黑名单列表如下:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


!org.codehaus.groovy.runtime.ConvertedClosure;!org.codehaus.groovy.runtime.ConversionHandler;!org.codehaus.groovy.runtime.MethodClosure;!org.springframework.transaction.support.AbstractPlatformTransactionManager;!java.rmi.server.UnicastRemoteObject;!java.rmi.server.RemoteObjectInvocationHandler;!com.bea.core.repackaged.springframework.transaction.support.AbstractPlatformTransactionManager;!java.rmi.server.RemoteObject;!org.apache.commons.collections.functors.*;!com.sun.org.apache.xalan.internal.xsltc.trax.*;!javassist.*;!java.rmi.activation.*;!sun.rmi.server.*;!org.jboss.interceptor.builder.*;!org.jboss.interceptor.reader.*;!org.jboss.interceptor.proxy.*;!org.jboss.interceptor.spi.metadata.*;!org.jboss.interceptor.spi.model.*;!com.bea.core.repackaged.springframework.aop.aspectj.*;!com.bea.core.repackaged.springframework.aop.aspectj.annotation.*;!com.bea.core.repackaged.springframework.aop.aspectj.autoproxy.*;!com.bea.core.repackaged.springframework.beans.factory.support.*;!org.python.core.*


从黑名单来看,一些Weblogic较新的gadget是可以使用的,比如CVE-2020–14644,但是发现在触发反序列化时,会提示`ClassNotFound`,回顾Weblogic反序列化漏洞分析历程,发现可以将其包裹到一个上下文环境中,比如`BasicServiceContext`:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


最终实现RCE:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


命令回显


通过内存搜索可以找到HTTP请求与响应对象:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造


但是这种方式有点繁琐。由于底层是Weblogic框架,也可以利用Weblogic自带的Request和Response对象实现命令回显:


【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。



点关注,不迷路!

【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造

关注公众号回复“漏洞”获取环境搭建教程

原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造

相关文章

2 条评论

您必须登录才能参与评论!
立即登录
  • Anonymous
    Anonymous 游客

    Hi! It’s possible you provide the configuration to this exploitation or the payload, please?
    Thank you.