weblogic cve漏洞捡漏指南
2021-04-21 18:41:21 Author: wiki.ioin.in(查看原文) 阅读量:247 收藏

今天又是weblogic补丁日。这次补丁日中我成功捡漏一个cve漏洞。下面给大家分享一下怎么捡漏weblogic和怎么反馈给weblogic补丁。

既然我们谈到挖weblogic。weblogic框架非常大,初次接触的老哥可能无从下手不知道从哪里开始挖洞。我们可以从补丁来分析一下历史漏洞。这篇文章是我去年下半年在部门分享中讲过,现在分享给大家。在这里还有很多漏洞类型没有覆盖,这种情况不要见怪,这只是一个最基础的讲解。

1. weblogic 补丁分析指南

1.1 Opatch

在你挖到漏洞后,最好安装weblogic的最新补丁来校验一下你的exp是否在最新补丁下生效。weblogic使用Opatch来管理补丁。在某些补丁中,补丁包对于Opatch最小版本是有要求,这时候我们需要升级Opatch补丁号为 [28186730: OPATCH 13.9.4.2.4 FOR FMW/WLS 12.2.1.3.0, 12.2.1.4.0 AND 14.1.1.0.0]来解决这个问题

https://support.oracle.com/epmos/faces/PatchHome?_adf.ctrl-state=1cdjuh74ay_4&_afrLoop=92240149765348#

下载后,解压至任意文件夹 Windows 执行下面的命令java -jar opatch_generic.jar -J-Doracle.installer.oh_admin_acl=true -silent oracle_home=<ORACLE_HOME_LOCATION>

其它系统执行下面的命令java -jar <PATCH_HOME>/6880880/opatch_generic.jar -silent oracle_home=<ORACLE_HOME_LOCATION>

有不懂的,看压缩包里的Readme

1.2 Opatch 打补丁

下载补丁后,解压至任意文件夹即可 在Oracle_home 安装目录中,找到Opatch文件夹,执行升级操作即可 Opatch apply 补丁解压的文件夹(注意是最内层文件夹

1.3 下载补丁

我们只关心安全补丁,下面说下怎么下载补丁 登录Oracle support网站,找到Patchs&Updates 栏目,点击进去

查询条件,自己根据需要构造即可REC的补丁,并且被标记为security,且Generic Platform平台,即是补丁

注意,oracle每年发布四次安全补丁,安全补丁可以跨版本打,也就是说,老补丁同时也集成在新补丁中,这点一定注意。

1.4 weblogic 补丁分析方法

weblogic中的补丁,其实是一个个编译好的class文件,我们直接使用idea打开补丁文件夹,就可以利用idea的反编译功能区分析补丁。

补丁中,每个class文件,都对应weblogic 实际目录中的一个class文件,打补丁你可以认为强行替换weblogic 中相关jar包中的class文件。

下面讲一下分析要点。对于这种安全补丁中,只有关于weblogic自身的安全问题,才会在这里体现,一般第三方包的安全漏洞,不会在该补丁中。

1.4.1 weblogic 黑名单

直接看files\oracle.wls.jrf.tenancy.common.sharedlib\12.2.1.4.0\wls.common.symbol\modules\com.bea.core.utils.jar\weblogic\utils\io 文件夹下的WeblogicFilterConfig.class 文件

因为weblogic 的漏洞,绝大多数都是T3协议、IIOP协议的java反序列化漏洞。而weblogic为了修复该漏洞,最简单的办法是设置反序列化黑名单并添加黑名单列表。如果反序列化时遇到的类存在于黑名单中,则中止反序列化过程。

我们只需要diff黑名单列表,自己研究构造poc即可。有的时候不一定是rce,也有可能是其他问题。

1.4.2 其他反序列化类

如果触发反序列化的类在正常业务中可能需要,或者因为其他原因不能屏蔽,weblogic的修复方法为直接修改相关的类。

如果一个类在readObject方法中,自己私自调用ObjectInputStream去执行反序列化操作而不是用weblogic提供的FilterInputStream执行反序列化操作,这样的话会导致weblogic的黑名单失效。这也就是反序列化中的反序列化漏洞,这种漏洞在weblogic中挺常见的。(不限于T3协议

例如 SOAPInvokeStat

我们diff中,可以明显发现weblogic的补丁将ObjectInputStream更改为FilterInputStream。在weblogic中,只有FilterInputStream才会在反序列化的流程中检查黑名单类。

然后,我们根据这个类中的参数,自己构造一个类即可。

在idea中,覆盖一个类最简单的办法是,在自己的项目中创建一个与被覆盖的类包名相同类名相同的类,然后修改你想要修改的代码即可。例如在这个反序列化中,我要修改writeExternal方法。直接强行替换成cve-2020-2555的gadget。

1.4.3 T3反序列化 XXE

一般情况下该类漏洞都是在继承自Exterinalizable的类 中,在自定义序列过程时,将类的某些字段,作为XML去存储在反序列化的信息中。反序列化时候,读取序列化信息中相关的字符串作为XML去解析。解析的过程中没有考虑到XXE攻击。这次我捡漏的cve就是该类型的漏洞。

weblogic.wsee.security.wssc.sct.SCCredential#readExternal方法中

this.appliesTo是反序列化得到的字符串,如果以<![[]]>开头,就会调用DOMUtils.toXMLNode去解析。其实也就是当成xml解析,并且没有任何过滤。

poc如下

2. 向oracle提交漏洞

网上查了一圈,好像没有太多讲解,正好我在这里分享一下我的提交过程。

这个xxe cve-2020-2211漏洞,是我去年12月的某天晚上失眠而挖到的一个洞。别大惊小怪,就是一个简单的xxe。然后写邮件给oracle。oracle提交漏洞的邮箱是[email protected]

在邮件的主题中,注明你这次挖到的洞是什么类型。邮件要用英文书写,反正也别说乱七八糟的客套话,老外也看不懂。开门见山直接分析漏洞,扔给他poc,截几张图就行了。

![](https://potatso-1253210846.cos.ap-beijing.myqcloud.com/20210421131555.png

一般等两三天左右,oracle就会回复你的邮件并确认漏洞分配一个内部编号。随后再回复你一封邮件,告诉你不要将这个漏洞透露给任何人。

然后就坐等cve编号即可。我这个漏洞等了将近半年才发下cve编号。一般在oracle补丁日前两三天发邮件告诉你的cve编号,影响等等各种信息。

至此,就获得一个cve编号。老铁们还不快点转发分享,下次再睡不着觉挖一个洞玩玩。

补丁已经放在星球中了,有需要的同学自取


文章来源: https://wiki.ioin.in/url/akNA
如有侵权请联系:admin#unsafe.sh