cve-2020-2555Oracle Coherence&WebLogic反序列化远程代码执行漏洞分析
字数 1721 2025-08-20 18:18:05

Oracle Coherence & WebLogic 反序列化远程代码执行漏洞分析 (CVE-2020-2555)

漏洞简介

CVE-2020-2555是Oracle WebLogic Server中Coherence组件的一个反序列化远程代码执行漏洞。该漏洞主要针对WebLogic的coherence.jar中存在能够实现反序列化gadget构造的类,通过T3协议接收的数据经过反序列化处理后会导致远程代码执行。

受影响版本

  • Oracle WebLogic 12.1.3.0.0
  • Oracle WebLogic 12.2.1.1.0
  • Oracle WebLogic 12.2.1.2.0
  • Oracle WebLogic 12.2.1.3.0
  • Oracle WebLogic 12.2.1.4.0

漏洞原理分析

漏洞根源

主要问题出现在LimitFilter类导致的反序列化安全问题。攻击者可以通过受控参数调用特定方法实现远程代码执行。

漏洞利用链(Gadget Chain)

  1. 反序列化入口(Source)

    • BadAttributeValueExpException.readObject()函数
    • 这是许多反序列化漏洞的常见入口点
  2. 关键类分析

    • LimitFilter类位于coherence.jar包的com/tangosol/util/filter/LimitFilter
    • toString()方法内部调用了ValueExtractorextract()方法
    • m_oAnchorBottom属性是可控的
  3. 利用链构造

    • ChainedExtractor类(位于com/tangosol/util/extractor/ChainedExtractor)允许串联多个extract()方法调用
    • 通过反射执行Java方法将runtime对象赋值给m_oAnchorTop
    • 触发LimitFiltertoString()方法中的extractor函数从而执行命令
  4. 目标方法(Sink)

    • Method.invoke()方法
    • 通过反射执行任意Java方法

环境搭建

实验环境要求

  • WebLogic: 12.2.1.4.0
  • JDK: 1.8.0_261

安装步骤

  1. 安装Java环境(推荐JDK8)
  2. 下载WebLogic安装包(如fmw_12.2.1.4.0_wls.jar)
  3. 执行安装命令: java -jar fmw_12.2.1.4.0_wls.jar
  4. 按照安装向导完成安装
  5. 安装完成后启动WebLogic服务

漏洞复现

准备工作

  1. 获取POC代码(如GitHub上的CVE-2020-2555项目)
  2. 使用IDEA打开POC项目
  3. 编译生成.ser反序列化payload文件

攻击步骤

  1. 使用Python脚本发送payload:
    python weblogic_t3.py <目标IP> 7001 test1.ser
    
  2. 成功执行将弹出计算器(Windows)或执行其他系统命令

技术细节

关键类分析

LimitFilter类

public class LimitFilter implements Filter, IndexAwareFilter, EntryAwareFilter {
    // ...
    public String toString() {
        // ...
        ValueExtractor extractor = this.m_comparator.getValueExtractor();
        Object value = extractor.extract(this.m_oAnchorTop);
        // ...
    }
}

ChainedExtractor类

public class ChainedExtractor implements ValueExtractor, PortableObject {
    // ...
    public Object extract(Object oTarget) {
        Object oValue = oTarget;
        for(int i = 0; i < this.m_aExtractor.length; ++i) {
            oValue = this.m_aExtractor[i].extract(oValue);
        }
        return oValue;
    }
}

利用链构造原理

  1. 构造一个BadAttributeValueExpException对象
  2. 设置其val属性为精心构造的LimitFilter对象
  3. LimitFilter对象包含恶意的ChainedExtractor
  4. 反序列化时触发toString()方法调用
  5. 通过ChainedExtractor链最终执行任意方法

防御措施

  1. 官方补丁

    • 应用Oracle官方发布的安全补丁
    • 升级到不受影响的WebLogic版本
  2. 临时缓解措施

    • 禁用T3协议或限制T3协议的访问
    • 使用网络防火墙限制对WebLogic端口的访问
  3. 安全配置

    • 启用WebLogic的安全配置
    • 限制反序列化操作

总结

CVE-2020-2555是一个典型的Java反序列化漏洞,利用WebLogic中Coherence组件的LimitFilterChainedExtractor类构造利用链,通过T3协议实现远程代码执行。该漏洞影响多个WebLogic版本,危害性较高。理解该漏洞的原理有助于防御类似的反序列化安全问题。

Oracle Coherence & WebLogic 反序列化远程代码执行漏洞分析 (CVE-2020-2555) 漏洞简介 CVE-2020-2555是Oracle WebLogic Server中Coherence组件的一个反序列化远程代码执行漏洞。该漏洞主要针对WebLogic的coherence.jar中存在能够实现反序列化gadget构造的类,通过T3协议接收的数据经过反序列化处理后会导致远程代码执行。 受影响版本 Oracle WebLogic 12.1.3.0.0 Oracle WebLogic 12.2.1.1.0 Oracle WebLogic 12.2.1.2.0 Oracle WebLogic 12.2.1.3.0 Oracle WebLogic 12.2.1.4.0 漏洞原理分析 漏洞根源 主要问题出现在 LimitFilter 类导致的反序列化安全问题。攻击者可以通过受控参数调用特定方法实现远程代码执行。 漏洞利用链(Gadget Chain) 反序列化入口(Source) BadAttributeValueExpException.readObject() 函数 这是许多反序列化漏洞的常见入口点 关键类分析 LimitFilter 类位于 coherence.jar 包的 com/tangosol/util/filter/LimitFilter 其 toString() 方法内部调用了 ValueExtractor 的 extract() 方法 m_oAnchorBottom 属性是可控的 利用链构造 ChainedExtractor 类(位于 com/tangosol/util/extractor/ChainedExtractor )允许串联多个 extract() 方法调用 通过反射执行Java方法将runtime对象赋值给 m_oAnchorTop 触发 LimitFilter 中 toString() 方法中的 extractor 函数从而执行命令 目标方法(Sink) Method.invoke() 方法 通过反射执行任意Java方法 环境搭建 实验环境要求 WebLogic: 12.2.1.4.0 JDK: 1.8.0_ 261 安装步骤 安装Java环境(推荐JDK8) 下载WebLogic安装包(如 fmw_12.2.1.4.0_wls.jar ) 执行安装命令: java -jar fmw_12.2.1.4.0_wls.jar 按照安装向导完成安装 安装完成后启动WebLogic服务 漏洞复现 准备工作 获取POC代码(如GitHub上的CVE-2020-2555项目) 使用IDEA打开POC项目 编译生成 .ser 反序列化payload文件 攻击步骤 使用Python脚本发送payload: 成功执行将弹出计算器(Windows)或执行其他系统命令 技术细节 关键类分析 LimitFilter类 ChainedExtractor类 利用链构造原理 构造一个 BadAttributeValueExpException 对象 设置其 val 属性为精心构造的 LimitFilter 对象 LimitFilter 对象包含恶意的 ChainedExtractor 链 反序列化时触发 toString() 方法调用 通过 ChainedExtractor 链最终执行任意方法 防御措施 官方补丁 应用Oracle官方发布的安全补丁 升级到不受影响的WebLogic版本 临时缓解措施 禁用T3协议或限制T3协议的访问 使用网络防火墙限制对WebLogic端口的访问 安全配置 启用WebLogic的安全配置 限制反序列化操作 总结 CVE-2020-2555是一个典型的Java反序列化漏洞,利用WebLogic中Coherence组件的 LimitFilter 和 ChainedExtractor 类构造利用链,通过T3协议实现远程代码执行。该漏洞影响多个WebLogic版本,危害性较高。理解该漏洞的原理有助于防御类似的反序列化安全问题。