专栏名称: 深信服千里目安全实验室
深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。
目录
相关文章推荐
武汉大学学生会  ·  青春本就是一片液态的疆域 ·  4 小时前  
浙江大学  ·  浙大病理AI助手,3秒锁定癌症病灶 ·  昨天  
武汉大学学生会  ·  珞珈青年社交观察局|当代青年的“聊缩力”困境 ... ·  3 天前  
武汉大学学生会  ·  图集|愿除旧妄生新意 ·  3 天前  
51好读  ›  专栏  ›  深信服千里目安全实验室

Oracle WebLogic Java反序列化远程代码执行漏洞CVE-2020-2963分析

深信服千里目安全实验室  · 公众号  ·  · 2020-11-03 16:52

正文

2020年4月,Oracle官方发布了重要补丁更新,其中包括了漏洞CVE-2020-2963,漏洞等级定义为高危。 在SOAPInvokeState类中存在漏洞,未对序列化数据的安全性做检测, 攻击者可以通过T3协议发送精心构造的序列化数据,从而达成远程代码执行的效果。

漏洞名称 : Oracle WebLogic 反序列化远程代码执行漏洞CVE-2020-2963

威胁等级 : 高危

影响范围 :

Oracle WebLogic Server 10.3.6.0.0

Oracle WebLogic Server 12.1.3.0.0
Oracle WebLogic Server 12.2.1.3.0
Oracle WebLogic Server 12.2.1.4.0

漏洞类型 : 远程代码执行

利用难度 : 中等


漏洞分析


1 WebLogic组件介绍

WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。


将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。WebLogic是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器,具有可扩展性,快速开发,灵活,可靠性等优势。


2 漏洞描述

2020年4月,Oracle官方发布了重要补丁更新,其中包括了漏洞CVE-2020-2963,漏洞等级定义为高危。在SOAPInvokeState类中存在漏洞,未对序列化数据的安全性做检测,攻击者可以通过T3协议发送精心构造的序列化数据,从而达成远程代码执行的效果。


3 漏洞分析

首先通过补丁比较,发现漏洞点,在weblogic.wsee.async.SOAPInvokeState类中,使用了ObjectInputStream.readObject来反序列化对象,补丁是在反序列化方法执行之前,将原来的ObjectInputStream替换为FilteringObjectInputStream,而FilteringObjectInputStream方法的实现就是在resolveClass层添加了一层过滤,检查该类是否在黑名单之列。

该漏洞点位于weblogic.wsee.async.SOAPInvokeState#readExternal方法,实现了Externalizable接口的类需要重写wirteExternal()方法和readExternal()方法,这样可以实现自定义方式的序列化和反序列化,而不受限于JVM。构造恶意的SOAPInvokeState对象,使其进入到readExternal方法,就可以执行攻击。

查看与readExternal对应的writeExternal方法,类似的使用了ObjectOutputStream.writeObject序列化了对象,但是首先需要使this.subject不为空,才能进入序列化的流程,而subject是SOAPInvokeState类的一个与认证有关的私有变量。

私有变量subject:

进入序列化流程的判断:

SOAPInvokeState类有多个构造方法,由于在反序列化方法readExternal中,需要使用到私有变量msg,因此只有通过使用带形参的构造方法SOAPInvokeState(SOAPMessageContext var1)构造的对象,才能成功被反序列化。

SOAPInvokeState类的构造方法:

反序列化中的msg:

可以被序列化的对象,会进入readExternal方法,在反序列化过程中,发现还存在解密的过程,对应的writeExternal方法存在加密过程。

readExternal中的解密:

writeExternal中的加密:

跟进EncryptionUtil.encrypt

方法,在weblogic.security.internal.SerializedSystemIni#getExistingEncryptionService方法发现需要秘钥文件SerializedSystemIni.dat,因此需要将SerializedSystemIni.dat秘钥文件放在固定位置才能进行加密操作。

攻击者通过writeExternal方法构造恶意SOAPInvokeState对象,并通过T3协议发送到存在漏洞的受害WebLogic服务器上,即可造成远程代码执行。


4 漏洞复现

搭建WebLogic环境,发送精心构造的序列化对象,在WebLogic服务器端成功执行了命令:


影响范围


目前受影响的WebLogic版本:

WebLogic Server 10.3.6.0.0

WebLogic Server 12.1.3.0.0

WebLogic Server 12.2.1.3.0

WebLogic Server 12.2.1.4.0


解决方案


1 修复建议

目前厂商已发布升级补丁以修复漏洞,补丁获取链接:

https://www.oracle.com/security-alerts/cpuapr2020.html


2深信服解决方案

深信服下一代防火墙 】可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。
深信服云盾 】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。
深信服安全感知平台 】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者IP的封堵。
深信服安全运营服务 】深信服云端安全专家提供7*24小时持续的安全运营服务。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。


时间轴







请到「今天看啥」查看全文