【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

admin 2021年8月6日07:03:47评论57 views字数 1937阅读6分27秒阅读模式

0x01 漏洞背景

在WebLogic官方发布的10月份安全补丁中,包含了由Venustech ADLab提交的CVE-2019-2890的修复。该漏洞通过T3协议发送恶意的反序列化数据绕过了Weblogic的黑名单,成功反序列化执行任意命令。通过官方公告可知,该漏洞的利用条件是需要认证。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

0x02 影响范围

  • Weblogic 10.3.6.0.0

  • Weblogic 12.1.3.0.0

  • Weblogic 12.2.1.3.0

0x03 漏洞分析

下面以10.3.6.0作为分析版本。问题出现在PersistentContext类上,通过查看继承关系我们知道PersistentContext类实现了序列化接口Serializable

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

我们来看看它的readObject方法,将ObjectInputStream类对象var1传入readSubject方法。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

跟进readSubject方法发现,会先从var1中读取反序列化数据当中的对象数据。然后调用EncryptionUtil.decrypt方法进行解密,最后解密后的数据被用于反序列化为对象。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

至此我们知道PersistenContext序列化数据中还携带了其他对象反序列化后的加密数据。如果我们在序列化PersistentContext时,将恶意对象反序列化数据先加密,然后writeObject,就可以让其携带恶意对象,绕过Weblogic黑名单进行反序列化了。

0x04 漏洞利用

根据以上思路,我们编写一个携带恶意对象的PersistenContext类。只需修改下原来代码中的writeSubject方法为如下,其中Poc.getObject()就是我们的恶意对象。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

进行序列化之前我们要处理四个问题第一个问题是创建PersistenContext对象报错

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

这是因为PersistenContext初始化时调用了SecurityServiceManager.isKernelIdentity()进行内核身份判断。isKernelIdentity方法无论如何都会抛出一个NotSupportedException异常,导致我们序列化被终止。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

我们可以将其注释掉

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析


第二个问题是反序列化PersistenContext类会出现卡死现象。这是因为PersistenContext等相关的类都会有一个AuthenticatedSubject静态对象要初始化。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

初始化时会进入到如下代码。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析


我们需要ceClient变量为true,否则会一直进循环执行ceSubjectManagerLock.wait()进行等待,无法序列化!而ceClient是从系统属性com.bea.core.internal.client获取的,所以在序列化之前需要将该属性设置为true

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

第三个问题是恶意对象没有被加密。这是因为在调用EncryptionUtil.encrypt方法加密时,会根据Kernel.isServer()true时才会进行加密,否则返回原数据。
因此加密之前需要调用KernelStatus.setIsServer(true)设置状态为true

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

第四个问题,加密时需要SerializedSystemIni.dat文件。 我们需要目标服务器weblogic当前使用域下该文件放到我们poc的根目录。这也是官方将这个漏洞划分为需要认证的原因。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

解决完这四个问题,就可以将PersistenContext对象反序列化为文件了。最后通过t3协议发送反序列化数据给Weblogic,即可执行任意命令。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

0x05 补丁分析

通过对比,发现最新补丁在反序列化时,使用WSFilteringObjectInputStream对要反序列化的对象进行过滤。

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

WSFilteringObjectInputStream实现了Weblogic下的过滤接口 FilteringObjectInputStream。在其resolveClass方法中,检查要反序列化的类是不是Subject的子类,不是则会抛出一个非法类异常,反序列化终止!

【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

0x06 分析总结

这个漏洞需要满足以下两个条件,才能触发成功,较为鸡肋。

  1. Weblogic开启t3协议

  2. 可以获取到SerializedSystemIni.dat文件

但是在实际环境中,如果部署在weblogic的站点存在任意文件下载或者任意文件读取,那么配合上该漏洞即可执行任意命令。

0x07 参考文章


本文始发于微信公众号(回忆飘如雪):【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年8月6日07:03:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【第16周】Weblogic t3反序列化漏洞(CVE-2019-2890)分析http://cn-sec.com/archives/345921.html

发表评论

匿名网友 填写信息