> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [mp.weixin.qq.com](https://mp.weixin.qq.com/s/eyZfAPivCkMbNCfukngpzg)
**赶紧点击上方话题进行订阅吧!**
报告编号:B6-2021-071903
报告来源:360CERT
报告作者:360CERT
更新日期:2021-07-19
1
漏洞简述
2021 年 04 月 21 日,360CERT 监测发现`Oracle官方`发布了`2021年4月份`的安全更新,本次分析报告选取的是其中一个反序列化漏洞,CVE 编号为`CVE-2021-2135`,漏洞等级:`严重`,漏洞评分:`9.8`。
未经身份验证的攻击者通过 T3 或 IIOP 协议发送恶意请求,最终接管服务器。
对此,360CERT 建议广大用户及时将`Weblogic`升级到最新版本。与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。
2
风险等级
评定方式 | 等级 |
---|
威胁等级 | 严重 |
影响面 | 广泛 |
攻击者价值 | 高 |
利用难度 | 低 |
360CERT 评分 | 9.8 |
3
漏洞详情
通过官方通告得知该漏洞依然是基于`Coherence`的反序列化,于是去`diff``WeblogicFilterConfig`,发现黑名单新增一个`coherence`类`com.tangosol.internal.util.SimpleBinaryEntry`。

此次漏洞是基于`CVE-2020-14756`漏洞的绕过,采用的思路依然是进行二次反序列化,绕过`Weblogic`自身`jep290`的黑名单限制。在`SimpleBinaryEntry`里存在`getKey/getValue`方法,这两个方法都调用了`ExternalizableHelper.fromBinary`方法。

在`fromBinary`方法里又调用了`deserializeInternal`,在该方法里会将`ReadBuffer`类型的输入流转换为`BufferInput`类型,传入`readObjectInternal`方法,

接着,调用`readExternalizableLite`方法。

在`CVE-2020-14756`中,对该方法进行了修复。

修复的原理是,只要输入流的类型是`ObjectInputStream`,那么会去调用`checkObjectInputFilter`方法,而`checkObjectInputFilter`的具体实现其实就是基于`jep290`的检测。

但是,当我们通过`BufferInput`流进行反序列化的时候,是不会被调用到`checkObjectInputFilter`方法的,于是绕过了之前的补丁。
### POC 构造
`SimpleBinaryEntry`的`getKey`方法在自身重写的`toString`方法内进行了调用。

那么首先要想办法触发`toString`方法,最开始我想到的是`BadAttributeValueExpException`,直接反序列化的时候就会调用对象的`toString`方法,不过这样就会有问题。在最终调用`serializer.deserialize`进行二次序列化的时候,`serializer`会因为没有赋值而报错,`SimpleBinaryEntry`自身有一个`setContextSerializer`方法,需要有地方能调用。

`serializer`的赋值在`ExternalizableHelper#readExternalizableLite`。

所以,还是需要先有流程走到`ExternalizableHelper#readExternalizableLite`,这里只需要`value`为`SimpleBinaryEntry`就能设置 serializer 。参考了漏洞发现者的文章,`toString`方法能够在`com.sun.org.apache.xpath.internal.objects.XString`重写的`equals`方法里调用。

而`ExternalizableHelper#readMap`方法里调用了`map.put`,熟悉反序列化的应该都很熟悉`put`方法,在`map.put`方法里会触发`key`的`equals`方法的调用,而这里的`oKey`和`oVal`都是可以通过序列化进行控制的,只需要`oKey`是`XString`类型即可。

接着还需要有一个调用`readMap`的地方,`com.tangosol.util.processor.ConditionalPutAll`的`readExternal`方法中刚好就存在`readMap`的调用。

看似已经没有问题了,但是这个类并不是`Externalizable`的子类,所以在反序列化的调用中,无法自动调用到`readExternal`方法,所以还是需要找另外一个入口来主动调用他的`readExternal`。这里就可以参考`CVE-2020-14756`了,入口类`com.tangosol.coherence.servlet.AttributeHolder`没有加到黑名单里。
完整的调用栈如下:

### 漏洞证明
`PatchID: 32124456`

### 漏洞修复
第一个修复的点依旧是针对黑名单,加入了`SimpleBinaryEntry`类。第二个修复点就是本次修复大改的地方,加入了白名单机制,只允许白名单里的类或其子类通过白名单。打了补丁后,再次发送攻击的包会报错,调用栈在`log`里清晰可见:

于是我们看到`weblogic.rjvm.InboundMsgAbbrev`,新增了一个白名单字段。
```
private static final Class[] ABBREV_CLASSES = new Class[]{String.class, ServiceContext.class, ClassTableEntry.class, JVMID.class, AuthenticatedUser.class, RuntimeMethodDescriptor.class, Immutable.class};
```
在`InboundMsgAbbrev`里的`readObject`方法将白名单传入了`readObjectValidated`方法

会设置`expectedType`,即白名单 List。

T3 自身的序列化流程走完之后,就开始走`ObjectInputStream`,在调用到`ServerChannelInputStream`重写的`resolveClass`的时候,先进行黑名单检测。

如果不在黑名单里,继续调用`super.resolveClass`,这个时候会调用`validateReturnType`方法 。

这里,进行了白名单检测,从`expectedType`取值,只要不是白名单里的子类型,那么就会直接报错。

4
时间线
**2021-04-20** Oracle 发布安全更新通告
**2021-04-21** 360CERT 发布通告
**2021-07-19** 360CERT 发布分析
5
参考链接
1、 Oracle Critical Patch Update Advisory - April 2021
_https://www.oracle.com/security-alerts/cpuapr2021.html_
2、 How Did I Find Weblogic T3 RCE
_https://xz.aliyun.com/t/9068_
6
特制报告下载链接
一直以来,360CERT 对全球重要网络安全事件进行快速通报、应急响应。为更好地为政企用户提供最新漏洞以及信息安全事件的安全通告服务,现 360CERT 正式推出安全通告特制版报告,以便用户做资料留存、传阅研究与查询验证。用户可直接通过以下链接进行特制报告的下载。
CVE-2021-2135:Weblogic 二次序列化漏洞分析
_http://certdl.qihucdn.com/cert-public-file/buddha_analyze/【360CERT】CVE-2021-2135_Weblogic_二次序列化漏洞分析. pdf_
若有订阅意向与定制需求请扫描下方二维码进行信息填写,或发送邮件至 g-cert-report#360.cn ,并附上您的 公司名、姓名、手机号、地区、邮箱地址。
往期推荐
01
[【PoC 公开】CVE-2021-22555: Linux Netfilter 本地权限提升漏洞通告](http://mp.weixin.qq.com/s?__biz=MzU5MjEzOTM3NA==&mid=2247489983&idx=1&sn=dad9bb3e15ba286905af62c052c5626b&chksm=fe251cbec95295a8dae15526215d585722fe04db1184ce652ab8a24572ef8d88532556bc211f&scene=21#wechat_redirect)
02
[SonicWall SRA/SMA 产品 SQL 注入漏洞](http://mp.weixin.qq.com/s?__biz=MzU5MjEzOTM3NA==&mid=2247489977&idx=1&sn=cf5b9354a8499514ddac6f3c4b931504&chksm=fe251cb8c95295ae1e3a5c04f7c4060c0b55c7d460e6d621faa95e8d8c60762b74f4a6480295&scene=21#wechat_redirect)
03
[2021-07 补丁日:微软多个漏洞通告](http://mp.weixin.qq.com/s?__biz=MzU5MjEzOTM3NA==&mid=2247489971&idx=1&sn=be64c1da6c3888dd8f2c3a4b7450c007&chksm=fe251cb2c95295a4cc4b9a2afa9733837b426aae65385d3ef12efa08b2ec7cb8502579ce3e6d&scene=21#wechat_redirect)

360CERT
https://cert.360.cn/
进入官网查看更多资讯
长按扫码关注我们


点击在看,进行分享
