CVE-2024-21006 Weblogic 远程代码执行挖掘思路
字数 1662 2025-08-05 08:19:13

CVE-2024-21006 WebLogic 远程代码执行漏洞分析与利用

漏洞概述

CVE-2024-21006 是 Oracle WebLogic Server 中的一个远程代码执行漏洞,该漏洞与之前的 CVE-2024-20931 和 CVE-2023-21839 类似,都是通过 IIOP 协议触发 JNDI 注入实现远程代码执行。漏洞评分为高危,影响多个 WebLogic 版本。

漏洞背景

该漏洞的利用方式与 CVE-2024-20931 和 CVE-2023-21839 类似,都是利用 IIOP -> JNDI 链造成远程代码执行。这些漏洞的共同入口点是 weblogic.jndi.internal.BasicNamingNode#lookupSharable 方法,在 resolveObject 中触发 JNDI 注入。

漏洞分析

关键代码路径

  1. 入口点:

    • weblogic.jndi.internal.BasicNamingNode#lookupSharable
  2. 触发条件:

    • restOfName 长度不为 0
    • object 类型不为 BasicNamingNode
    • 会进入 else 分支执行漏洞利用代码
  3. restOfName 赋值逻辑:

    • 通过 getRest 方法解析 name 参数
    • name 的第一个字符是 '",或者包含 ./ 时,可以解析出 rest

getRest 方法分析

private String getRest(String name) throws NamingException {
    int nameLength = name.length();
    if (nameLength == 0) {
        return name;
    } else {
        char firstChar = name.charAt(0);
        int i;
        if (firstChar == '"') {
            i = name.indexOf(34, 1);
            this.checkQuoteClose(i, name);
            ++i;
            if (i < nameLength && this.isSeparator(name.charAt(i))) {
                ++i;
            }
            return name.substring(i);
        } else if (firstChar == '\'') {
            i = name.indexOf(39, 1);
            this.checkQuoteClose(i, name);
            ++i;
            if (i < nameLength && this.isSeparator(name.charAt(i))) {
                ++i;
            }
            return name.substring(i);
        } else {
            for(i = 0; i < nameLength; ++i) {
                char currentChar = name.charAt(i);
                switch (currentChar) {
                    case '"':
                    case '\'':
                        throw new InvalidNameException("Unescaped quote in a component");
                    case '\\':
                        ++i;
                        if (i == nameLength) {
                            throw new InvalidNameException("An escape at the end of a name must be escaped");
                        }
                        break;
                    default:
                        if (this.isSeparator(currentChar)) {
                            return name.substring(i + 1);
                        }
                }
            }
            return "";
        }
    }
}

JNDI 注入流程

  1. 调用 getContinuationCtx 方法
  2. 首先调用 JNDIUtils.isValidReferenceObject 检查引用对象
  3. 进一步调用 isValidJndiScheme 验证协议
  4. 通过 processURLAddrs 方法提取 ref 对象里的 classFactoryLocation 属性
  5. 检查 classFactoryLocation 允许的协议 (jndiAllowScheme),默认为空,不允许远程 HTTP 协议

本地 ObjectFactory 利用

由于无法加载远程 class,攻击者需要寻找本地可利用的 ObjectFactory:

  1. 漏洞利用的关键类是 weblogic.application.naming.MessageDestinationObjectFactory
  2. getObjectInstance 方法中,obj 参数是 lookup 的对象
  3. 调用对象的 lookupMessageDestination 方法
  4. jndiName 是实例属性,可控,最终导致 JNDI 注入

影响版本

受影响的 WebLogic 版本包括:

  • 12.2.1.3.0
  • 12.2.1.4.0
  • 14.1.1.0.0

漏洞修复

Oracle 已于 2024 年 4 月 16 日发布补丁修复该漏洞。

技术问答

Q: 在高版本 JDK 中是否可以使用此漏洞?

A: 在高版本 JDK 中,虽然攻击目标是本地工厂类,但这个本地工厂类的最终实现仍然是 JNDI,因此在高版本 JDK 中仍然会受到限制。

时间线

  • 2024-03-29: 漏洞提交至 Oracle
  • 2024-04-16: Oracle 发布补丁通告

防御建议

  1. 及时应用 Oracle 发布的最新补丁
  2. 限制 WebLogic 服务器的网络访问,特别是 IIOP 端口
  3. 监控和限制 JNDI 查找操作
  4. 升级到最新版本的 JDK 以减少 JNDI 注入的风险

总结

CVE-2024-21006 是 WebLogic 中一个严重的远程代码执行漏洞,攻击者可以通过精心构造的 IIOP 请求触发 JNDI 注入,最终实现远程代码执行。与之前的类似漏洞相比,它利用了不同的代码路径和本地 ObjectFactory 来实现攻击。管理员应尽快应用补丁并采取适当的防御措施。

CVE-2024-21006 WebLogic 远程代码执行漏洞分析与利用 漏洞概述 CVE-2024-21006 是 Oracle WebLogic Server 中的一个远程代码执行漏洞,该漏洞与之前的 CVE-2024-20931 和 CVE-2023-21839 类似,都是通过 IIOP 协议触发 JNDI 注入实现远程代码执行。漏洞评分为高危,影响多个 WebLogic 版本。 漏洞背景 该漏洞的利用方式与 CVE-2024-20931 和 CVE-2023-21839 类似,都是利用 IIOP -> JNDI 链造成远程代码执行。这些漏洞的共同入口点是 weblogic.jndi.internal.BasicNamingNode#lookupSharable 方法,在 resolveObject 中触发 JNDI 注入。 漏洞分析 关键代码路径 入口点 : weblogic.jndi.internal.BasicNamingNode#lookupSharable 触发条件 : 当 restOfName 长度不为 0 且 object 类型不为 BasicNamingNode 时 会进入 else 分支执行漏洞利用代码 restOfName 赋值逻辑 : 通过 getRest 方法解析 name 参数 当 name 的第一个字符是 ' 或 " ,或者包含 . 和 / 时,可以解析出 rest getRest 方法分析 JNDI 注入流程 调用 getContinuationCtx 方法 首先调用 JNDIUtils.isValidReferenceObject 检查引用对象 进一步调用 isValidJndiScheme 验证协议 通过 processURLAddrs 方法提取 ref 对象里的 classFactoryLocation 属性 检查 classFactoryLocation 允许的协议 ( jndiAllowScheme ),默认为空,不允许远程 HTTP 协议 本地 ObjectFactory 利用 由于无法加载远程 class,攻击者需要寻找本地可利用的 ObjectFactory : 漏洞利用的关键类是 weblogic.application.naming.MessageDestinationObjectFactory 其 getObjectInstance 方法中, obj 参数是 lookup 的对象 调用对象的 lookupMessageDestination 方法 jndiName 是实例属性,可控,最终导致 JNDI 注入 影响版本 受影响的 WebLogic 版本包括: 12.2.1.3.0 12.2.1.4.0 14.1.1.0.0 漏洞修复 Oracle 已于 2024 年 4 月 16 日发布补丁修复该漏洞。 技术问答 Q: 在高版本 JDK 中是否可以使用此漏洞? A: 在高版本 JDK 中,虽然攻击目标是本地工厂类,但这个本地工厂类的最终实现仍然是 JNDI,因此在高版本 JDK 中仍然会受到限制。 时间线 2024-03-29: 漏洞提交至 Oracle 2024-04-16: Oracle 发布补丁通告 防御建议 及时应用 Oracle 发布的最新补丁 限制 WebLogic 服务器的网络访问,特别是 IIOP 端口 监控和限制 JNDI 查找操作 升级到最新版本的 JDK 以减少 JNDI 注入的风险 总结 CVE-2024-21006 是 WebLogic 中一个严重的远程代码执行漏洞,攻击者可以通过精心构造的 IIOP 请求触发 JNDI 注入,最终实现远程代码执行。与之前的类似漏洞相比,它利用了不同的代码路径和本地 ObjectFactory 来实现攻击。管理员应尽快应用补丁并采取适当的防御措施。