freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Oracle WebLogic Java反序列化远程代码执行漏洞CVE-2020-2963分析
深信服千里目安全技术中心 2020-11-09 15:13:46 201867

一、漏洞概要

漏洞名称

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

漏洞类型

远程代码执行

利用难度

中等

二、漏洞分析

2.1 Weblogic组件介绍

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

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

2.2 漏洞描述

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

2.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服务器上,即可造成远程代码执行。

2.4 漏洞复现

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

三、影响范围

目前受影响的WebLogic版本:

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

四、解决方案

修复建议

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

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

五、时间轴

2020/04/16  Oracle 官方发布修复补丁。

2020/11/03  深信服千里目安全实验室发布漏洞通告。

六、参考链接

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

# 漏洞分析
本文为 深信服千里目安全技术中心 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
深信服千里目安全技术中心 LV.9
这家伙太懒了,还未填写个人描述!
  • 417 文章数
  • 611 关注者
【漏洞通告】Ivanti多产品缓冲区溢出漏洞(CVE-2025-22457)
2025-04-11
【漏洞通告】Vite 任意文件读取漏洞(CVE-2025-31486)
2025-04-09
【漏洞通告】微软补丁日安全通告|4月份
2025-04-09