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接口的反序列化机制:
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可控
- 通过
-
调用链展开:
PartialResult.readExternal() → instantiateInternalMap() → SortedBag.add() → TreeMap.put() → AbstractExtractor.compare() → MvelExtractor.extract() -
入口类:
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。理解其原理有助于防御类似漏洞,同时也提醒开发人员注意反序列化操作的安全性。