CVE-2022-21445 Oracle JDeveloper ADF Faces反序列化漏洞影响众多Oracle产品
Oracle JDeveloper 是一个免费的非开源的集成开发环境,通过支持完整的开发生命周期简化了基于 Java 的 SOA 应用程序和用户界面的开发。
近日监测到 Oracle JDeveloper ADF Faces 通报了一个反序列化漏洞 CVE-2022-21445 ,未经身份认证的远程攻击者可利用该漏洞实现不可信数据的反序列化,可在受影响的服务器中执行任意代码。从通报信息来看,任何基于 ADF Faces 框架开发的程序都受到此漏洞的影响,包括 Oracle 自身的多个产品:
Oracle Business Intelligence
Oracle Enterprise Manager
Oracle Identity Management
Oracle SOA Suite
Oracle WebCenter Portal
Oracle Application Testing Suite
Oracle Transportation Management
Oracle Access Manager
影响版本如下:
Oracle JDeveloper == 12.2.1.3.0
Oracle JDeveloper == 12.2.1.4.0
首先从官网下载 Oracle JDeveloper 进行安装:
CVE-2022-21445 漏洞触发点位于 Oracle JDeveloper ADF Faces 的基础类 `org.apache.myfaces.trinidad.webapp.ResourceServlet` :
`ResourceServlet` 继承于 `HttpServlet` ,对应一个 Servlet HTTP 请求,比如在 Oracle JDeveloper 安装后默认例子的 `web.xml` 就存在相关的定义:
定位 `ResourceServlet#doGet` 函数:
根据 HTTP 请求对象 `request` 获取 `ResourceLoader` 对象,接着调用其 `getResource` 函数获取 `URL` 对象,然后调用 `URL#openConnection` 函数。我们跟进 `getResource` 函数:
函数 `findResource` 直接返回 `null` ,但是可以找到 `20` 个 `ResourceLoader` 类的子类重写覆盖了 `findResource` 函数:
注意到其中的一个子类 `RemoteApplicationResourceLoader` :
进入 `RemoteApplicationResourceLoader.RAStreamHandler` 类定义:
注意其 `openConnection` 函数里面调用了 `RemoteApplicationResourceLoader#RAURLConnection` 函数,进入:
参数是一路传递过去的,直接到达反序列化的触发点,存在反序列化漏洞的风险。
下面我们需要做的事情是如何确定访问 URL ,让请求进入 `RemoteApplicationResourceLoader` 进行处理。通过分析 `ResourceLoader` 的其他子类,发现在 `oracle.adfinternal.view.resource.rich.RenderKitResourceLoader` 类的构造函数中注册了大量 URL 规则,其中就包括 `RemoteApplicationResourceLoader` :
因此我们可以尝试构造 `/afr/test1/remote/test2/` 的 URL 格式使得请求进入 `RemoteApplicationResourceLoader` ,从而触发反序列化操作。
前面都是利用 Oracle JDeveloper 对代码进行静态审计,因为众多 Oracle 官方产品都使用的 Oracle JDeveloper 库,所以漏洞影响面较大,比如前面我们分析过的 Oracle Access Manager :
CVE-2021–35587 Oracle Access Manager 反序列化漏洞
QCyber,公众号:且听安全【最新漏洞预警】CVE-2021–35587 Oracle Access Manager反序列化漏洞分析与命令回显构造
`7001` 端口就存在 CVE-2022-21445 反序列化漏洞,下面通过一个以前没有研究过的产品 Oracle Business Intelligence 来复现该漏洞。Oracle Business Intelligence 安装过程比较复杂,经过多次失败尝试后终于安装成功,为了避免小伙伴们踩坑,漏洞空间站介绍了详细的安装过程,有兴趣的小伙伴可以加入进行交流。
安装并配置完毕:
最终对外服务:
WebLogic Console : http://***:9500/console
WebLogic Enterprise Manager: http://***:9500/em
BI publisher: http://***:9502/xmlpserver
BI Analytics: http://***:9502/analytics
完成环境搭建并启动后,首先搜索下触发漏洞的关键类 `org.apache.myfaces.trinidad.webapp.ResourceServlet` 被调用的情况:
存在多处调用。我们可以参考 Oracle Access Manager CVE-2021–35587 反序列化漏洞利用的构造方式,继续使用 CVE-2020–14644 利用链。因为 Oracle Business Intelligence 也是运行在 Weblogic 之上,所以我们可以利用 Weblogic 框架自带的 `Request` 和 `Response` 对象实现命令回显。
`9500` 端口对应的 `Enterprise Manager` 实现命令执行回显:
`9502` 端口对应的 BI Composer 实现命令执行回显:
至于 Oracle Access Manager 的利用方式和上面几乎一模一样,这里就不过多赘述,有兴趣的小伙伴们可以自行研究,也可以加入漏洞空间站进行交流。