从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 注入攻击。
利用链
- 攻击者构造恶意 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 注入
关键代码分析
// 绕过点: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
- 漏洞类型:远程绑定导致的潜在代码执行
利用思路
- 通过远程绑定操作到达特定方法
- 虽然不能直接到达危险函数,但可能通过二次利用触发漏洞
关键限制
- 无法直接控制危险函数的参数
- 需要结合其他漏洞或环境条件才能实现完整利用
技术细节补充
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 中的演变过程,从直接利用危险工厂类到通过环境变量间接控制,再到尝试通过远程绑定触发漏洞。理解这些漏洞的利用链对于防御类似攻击具有重要意义。