从CVE-2023-21839到CVE-2024-20931
字数 1862 2025-08-18 11:35:30

Oracle WebLogic 反序列化漏洞分析:从 CVE-2023-21839 到 CVE-2024-20931

漏洞背景

本文分析 Oracle WebLogic Server 中一系列 JNDI 注入和反序列化漏洞,从 CVE-2023-21839 到 CVE-2024-20931,重点探讨漏洞利用链的演变和防御绕过技术。

CVE-2023-21839 分析

漏洞概述

  • 影响版本:Oracle WebLogic Server 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0
  • CVSS 评分:7.5
  • 漏洞类型:JNDI 注入导致的远程代码执行

漏洞细节

漏洞位于 weblogic.jndi.internal.WLInitialContextFactory 中,攻击者可以通过构造恶意的 JNDI 上下文,利用 oracle.jms.AQjmsInitialContextFactory 进行 JNDI 注入攻击。

利用链

  1. 攻击者构造恶意 InitialContext,指定 Context.INITIAL_CONTEXT_FACTORYoracle.jms.AQjmsInitialContextFactory
  2. 通过 Context.PROVIDER_URL 指定恶意 LDAP/RMI 服务器
  3. WebLogic 在处理时会触发 JNDI 查找,导致远程代码执行

补丁分析

Oracle 通过限制可用的 InitialContextFactory 类来修复此漏洞,黑名单了 oracle.jms.AQjmsInitialContextFactory 等危险工厂类。

CVE-2024-20931 分析

漏洞概述

  • 影响版本:Oracle WebLogic Server 12.2.1.4.0, 14.1.1.0.0
  • CVSS 评分:8.3
  • 漏洞类型:JNDI 注入绕过导致的远程代码执行

绕过技术

在 CVE-2023-21839 补丁后,攻击者发现可以通过以下方式绕过:

  1. 使用 weblogic.jndi.internal.WLInitialContextFactory 作为工厂类
  2. 通过 weblogic.jndi.environment 属性设置 java.naming.factory.initialoracle.jms.AQjmsInitialContextFactory
  3. 利用 WebLogic 内部处理逻辑,最终仍会触发 JNDI 注入

关键代码分析

// 绕过点:WLInitialContextFactory 内部处理
if (environment != null) {
    String factory = (String)environment.get("java.naming.factory.initial");
    if (factory != null) {
        // 这里仍然会使用环境变量中指定的工厂类
        initialContextFactory = factory;
    }
}

CVE-2024-21006 分析

漏洞概述

  • 影响版本:Oracle WebLogic Server 12.2.1.4.0, 14.1.1.0.0
  • 漏洞类型:远程绑定导致的潜在代码执行

利用思路

  1. 通过远程绑定操作到达特定方法
  2. 虽然不能直接到达危险函数,但可能通过二次利用触发漏洞

关键限制

  • 无法直接控制危险函数的参数
  • 需要结合其他漏洞或环境条件才能实现完整利用

技术细节补充

oracle.jms.AQjmsInitialContextFactory 位置

  • 该类通常位于 aqapi.jar
  • 在 WebLogic 安装目录中可能位于:$ORACLE_HOME/wlserver/server/lib/aqapi.jar
  • 如果找不到,可以尝试以下方法:
    1. 使用 find 命令搜索整个 WebLogic 目录
    2. 检查 $ORACLE_HOME/oracle_common/modules/oracle.jms_12.x.x 目录
    3. 使用 jar -tf 命令检查各个 jar 包内容

漏洞利用关键点

  1. InitialContextFactory 控制:必须能够控制 JNDI 查找使用的工厂类
  2. 环境变量注入:通过 weblogic.jndi.environment 注入额外属性
  3. 类加载机制:WebLogic 的类加载顺序影响漏洞利用成功率

防御建议

  1. 及时应用 Oracle 发布的最新安全补丁
  2. 限制 WebLogic 服务器的网络访问,特别是出向连接
  3. 监控 JNDI 查找操作,特别是使用非常规工厂类的情况
  4. 考虑使用 Java 安全策略限制危险操作

总结

这一系列漏洞展示了 JNDI 注入攻击在 WebLogic 中的演变过程,从直接利用危险工厂类到通过环境变量间接控制,再到尝试通过远程绑定触发漏洞。理解这些漏洞的利用链对于防御类似攻击具有重要意义。

Oracle WebLogic 反序列化漏洞分析:从 CVE-2023-21839 到 CVE-2024-20931 漏洞背景 本文分析 Oracle WebLogic Server 中一系列 JNDI 注入和反序列化漏洞,从 CVE-2023-21839 到 CVE-2024-20931,重点探讨漏洞利用链的演变和防御绕过技术。 CVE-2023-21839 分析 漏洞概述 影响版本:Oracle WebLogic Server 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 CVSS 评分:7.5 漏洞类型:JNDI 注入导致的远程代码执行 漏洞细节 漏洞位于 weblogic.jndi.internal.WLInitialContextFactory 中,攻击者可以通过构造恶意的 JNDI 上下文,利用 oracle.jms.AQjmsInitialContextFactory 进行 JNDI 注入攻击。 利用链 攻击者构造恶意 InitialContext,指定 Context.INITIAL_CONTEXT_FACTORY 为 oracle.jms.AQjmsInitialContextFactory 通过 Context.PROVIDER_URL 指定恶意 LDAP/RMI 服务器 WebLogic 在处理时会触发 JNDI 查找,导致远程代码执行 补丁分析 Oracle 通过限制可用的 InitialContextFactory 类来修复此漏洞,黑名单了 oracle.jms.AQjmsInitialContextFactory 等危险工厂类。 CVE-2024-20931 分析 漏洞概述 影响版本:Oracle WebLogic Server 12.2.1.4.0, 14.1.1.0.0 CVSS 评分:8.3 漏洞类型:JNDI 注入绕过导致的远程代码执行 绕过技术 在 CVE-2023-21839 补丁后,攻击者发现可以通过以下方式绕过: 使用 weblogic.jndi.internal.WLInitialContextFactory 作为工厂类 通过 weblogic.jndi.environment 属性设置 java.naming.factory.initial 为 oracle.jms.AQjmsInitialContextFactory 利用 WebLogic 内部处理逻辑,最终仍会触发 JNDI 注入 关键代码分析 CVE-2024-21006 分析 漏洞概述 影响版本:Oracle WebLogic Server 12.2.1.4.0, 14.1.1.0.0 漏洞类型:远程绑定导致的潜在代码执行 利用思路 通过远程绑定操作到达特定方法 虽然不能直接到达危险函数,但可能通过二次利用触发漏洞 关键限制 无法直接控制危险函数的参数 需要结合其他漏洞或环境条件才能实现完整利用 技术细节补充 oracle.jms.AQjmsInitialContextFactory 位置 该类通常位于 aqapi.jar 中 在 WebLogic 安装目录中可能位于: $ORACLE_HOME/wlserver/server/lib/aqapi.jar 如果找不到,可以尝试以下方法: 使用 find 命令搜索整个 WebLogic 目录 检查 $ORACLE_HOME/oracle_common/modules/oracle.jms_12.x.x 目录 使用 jar -tf 命令检查各个 jar 包内容 漏洞利用关键点 InitialContextFactory 控制 :必须能够控制 JNDI 查找使用的工厂类 环境变量注入 :通过 weblogic.jndi.environment 注入额外属性 类加载机制 :WebLogic 的类加载顺序影响漏洞利用成功率 防御建议 及时应用 Oracle 发布的最新安全补丁 限制 WebLogic 服务器的网络访问,特别是出向连接 监控 JNDI 查找操作,特别是使用非常规工厂类的情况 考虑使用 Java 安全策略限制危险操作 总结 这一系列漏洞展示了 JNDI 注入攻击在 WebLogic 中的演变过程,从直接利用危险工厂类到通过环境变量间接控制,再到尝试通过远程绑定触发漏洞。理解这些漏洞的利用链对于防御类似攻击具有重要意义。