WebLogic CVE-2020-14756 T3/IIOP 反序列化RCE
字数 1721 2025-08-10 08:28:32

WebLogic CVE-2020-14756 T3/IIOP 反序列化RCE漏洞分析与利用

漏洞概述

CVE-2020-14756是Oracle WebLogic Server中的一个高危反序列化远程代码执行漏洞,影响WebLogic Server 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0和14.1.1.0.0版本。攻击者可以通过T3/IIOP协议发送恶意序列化数据,在目标服务器上执行任意代码。

漏洞原理分析

漏洞根源

漏洞存在于WebLogic的Coherence组件中,具体涉及com.tangosol.io.ExternalizableLite接口的反序列化机制:

  1. ExternalizableLite接口提供了序列化/反序列化逻辑
  2. readObject()方法通过readObjectInternal()根据nType进入不同的反序列化函数
  3. nTypegetStreamFormat()方法决定,当对象是ExternalizableLite实现类时返回10

关键调用链

  1. 反序列化入口ExternalizableHelper.readObjectInternal()

    • nType=10时调用readExternalizableLite()
    • 使用loadClass加载类,不受WebLogic黑名单限制
  2. 利用类选择com.tangosol.coherence.rest.util.extractor.MvelExtractor

    • 实现了ExternalizableLite接口
    • readExternal()方法中m_sExpr表达式可控
  3. 触发点:需要触发MvelExtractor.extract()方法

    • 通过com.tangosol.util.aggregator.TopNAggregator.PartialResultreadExternal()
    • 调用this.instantiateInternalMap(this.m_comparator),其中comparator可控
  4. 调用链展开

    PartialResult.readExternal()
    → instantiateInternalMap()
    → SortedBag.add()
    → TreeMap.put()
    → AbstractExtractor.compare()
    → MvelExtractor.extract()
    
  5. 入口类com.tangosol.coherence.servlet.AttributeHolder

    • 实现了Externalizable接口
    • readExternal()调用ExternalizableHelper.readObject()
    • 触发PartialResultreadExternal

漏洞复现

环境准备

  • 受影响的WebLogic版本
  • 能够访问WebLogic T3/IIOP端口(默认7001)

利用步骤

  1. 构造恶意序列化数据:

    • 使用AttributeHolder作为入口
    • 包含精心构造的PartialResult对象
    • 设置MvelExtractorm_sExpr为恶意表达式
  2. 通过T3/IIOP协议发送恶意数据

  3. 服务器反序列化时触发RCE

EXP示例

(参考作者GitHub,此处不展示具体利用代码)

防御措施

  1. 官方补丁

    • 应用Oracle官方发布的最新安全补丁
  2. 临时缓解方案

    • 限制T3/IIOP协议的访问
    • 在网络层面限制对WebLogic端口的访问
    • 启用WebLogic自带的反序列化过滤器
  3. 长期防护

    • 定期更新WebLogic到最新版本
    • 实施网络分段,减少暴露面
    • 监控异常T3/IIOP流量

技术思考

  1. 其他潜在利用点

    • ExternalizableHelper.readObjectInternal()nType有多种类型
    • 其他case可能存在类似漏洞
  2. 防护建议

    • 实现严格的反序列化白名单
    • 监控JNDI和RMI相关操作

参考资源

  1. 原文作者分析文章
  2. Oracle官方安全公告
  3. 相关CVE描述
  4. WebLogic安全配置指南

总结

CVE-2020-14756是一个典型的Java反序列化漏洞,利用WebLogic Coherence组件中的缺陷实现RCE。理解其原理有助于防御类似漏洞,同时也提醒开发人员注意反序列化操作的安全性。

WebLogic CVE-2020-14756 T3/IIOP 反序列化RCE漏洞分析与利用 漏洞概述 CVE-2020-14756是Oracle WebLogic Server中的一个高危反序列化远程代码执行漏洞,影响WebLogic Server 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0和14.1.1.0.0版本。攻击者可以通过T3/IIOP协议发送恶意序列化数据,在目标服务器上执行任意代码。 漏洞原理分析 漏洞根源 漏洞存在于WebLogic的Coherence组件中,具体涉及 com.tangosol.io.ExternalizableLite 接口的反序列化机制: ExternalizableLite 接口提供了序列化/反序列化逻辑 readObject() 方法通过 readObjectInternal() 根据 nType 进入不同的反序列化函数 nType 由 getStreamFormat() 方法决定,当对象是 ExternalizableLite 实现类时返回10 关键调用链 反序列化入口 : ExternalizableHelper.readObjectInternal() 当 nType=10 时调用 readExternalizableLite() 使用 loadClass 加载类,不受WebLogic黑名单限制 利用类选择 : com.tangosol.coherence.rest.util.extractor.MvelExtractor 实现了 ExternalizableLite 接口 readExternal() 方法中 m_sExpr 表达式可控 触发点 :需要触发 MvelExtractor.extract() 方法 通过 com.tangosol.util.aggregator.TopNAggregator.PartialResult 的 readExternal() 调用 this.instantiateInternalMap(this.m_comparator) ,其中 comparator 可控 调用链展开 : 入口类 : com.tangosol.coherence.servlet.AttributeHolder 实现了 Externalizable 接口 readExternal() 调用 ExternalizableHelper.readObject() 触发 PartialResult 的 readExternal 漏洞复现 环境准备 受影响的WebLogic版本 能够访问WebLogic T3/IIOP端口(默认7001) 利用步骤 构造恶意序列化数据: 使用 AttributeHolder 作为入口 包含精心构造的 PartialResult 对象 设置 MvelExtractor 的 m_sExpr 为恶意表达式 通过T3/IIOP协议发送恶意数据 服务器反序列化时触发RCE EXP示例 (参考作者GitHub,此处不展示具体利用代码) 防御措施 官方补丁 : 应用Oracle官方发布的最新安全补丁 临时缓解方案 : 限制T3/IIOP协议的访问 在网络层面限制对WebLogic端口的访问 启用WebLogic自带的反序列化过滤器 长期防护 : 定期更新WebLogic到最新版本 实施网络分段,减少暴露面 监控异常T3/IIOP流量 技术思考 其他潜在利用点 : ExternalizableHelper.readObjectInternal() 中 nType 有多种类型 其他case可能存在类似漏洞 防护建议 : 实现严格的反序列化白名单 监控JNDI和RMI相关操作 参考资源 原文作者分析文章 Oracle官方安全公告 相关CVE描述 WebLogic安全配置指南 总结 CVE-2020-14756是一个典型的Java反序列化漏洞,利用WebLogic Coherence组件中的缺陷实现RCE。理解其原理有助于防御类似漏洞,同时也提醒开发人员注意反序列化操作的安全性。