Oracle WebLogic Two RCE Deserialization Vulnerabilities

栏目: Java · 发布时间: 7年前

内容简介:Oracle 官方在7月份发布当我在阅读可以看到,

Oracle 官方在7月份发布 关键补丁更新 之后,我在当月随后陆续提交了一些weblogic的不同类型漏洞,由于官方并 没有全部修复完成,本次的补丁修复了我报送的6个漏洞,其中有3个漏洞由于某些原因合并成1个CVE,本文针对10 月份这次补丁修复的其他两个漏洞进行简单分析。其中CVE-2018-3245是补来补去一直没有修好的 Weblogic JRMP 反 序列化漏洞,另一个漏洞CVE-2018-3252是 DeploymentService 组件的反序列化漏洞。

CVE-2018-3252 (DeploymentService Deserialization via HTTP)

当我在阅读 DeploymentService 这个 servlet 的时候,在 doPost 函数中看到用于对通过HTTP方式提交的POST数据处理的核心函数 internalDoPost

Oracle WebLogic Two RCE Deserialization Vulnerabilities

可以看到, var4 是通过HTTPHeader中的 wl_request_type 获取。然后进入不同的处理逻辑中。这里先跟进 handleDataTransferRequest 函数。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

在上图箭头所指向的地方,程序对 var9 进行了反序列化,而 var9 是通过 DeploymentObjectInputStream 的构造函数生成,其中函数中的参数都是我们可控制的。

再来看 handleDeploymentServiceMessage 函数,基本逻辑大致相同,也是对 DeploymentObjectInputStream 对象的反序列化。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

看到这里,心里隐隐觉得这个洞应该很好用,还是通过HTTP的方式。细心的同学可能发现,这里我们分析的每个函数都有一个参数是AuthenticatedSubject对象。这就是这个漏洞鸡肋的地方,需要 用户认证 。有兴趣的同学可以深入分析一下weblogic的用户认证机制,试试bypass 。具体函数请参考 authenticateRequest ,下图关于该函数有做删减,方便大家看到weblogic提供的两种认证方式。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

这里我们使用 username/password 的用户认证方式验证PoC。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

CVE-2018-3245(JRMP Deserialization via T3)

在拿到7月份补丁后迅速去diff了一下,果然不出所料,针对JRMP反序列化修复的方式依旧是增加黑名单。黑名单package(DEFAULT_BLACKLIST_PACKAGES)新增 java.rmi.activation sun.rmi.server ;黑名单class(DEFAULT_BLACKLIST_CLASSES)新增 java.rmi.server.UnicastRemoteObject java.rmi.server.RemoteObjectInvocationHandler

 private static final String[] DEFAULT_BLACKLIST_PACKAGES = {
"org.apache.commons.collections.functors", "com.sun.org.apache.xalan.internal.xsltc.trax",
"javassist", "java.rmi.activation", "sun.rmi.server" };

  private static final String[] DEFAULT_BLACKLIST_CLASSES = {
"org.codehaus.groovy.runtime.ConvertedClosure",
"org.codehaus.groovy.runtime.ConversionHandler", "org.codehaus.groovy.runtime.MethodClosure",
"org.springframework.transaction.support.AbstractPlatformTransactionManager",
"java.rmi.server.UnicastRemoteObject", "java.rmi.server.RemoteObjectInvocationHandler" };

其实如果认真分析过之前相关漏洞和补丁的同学,都能够很容易找到绕过的方式。

正如之前和 lpwd 讨论的所谈到,只要满足继承 java.rmi.server.RemoteObject ,且不在黑名单之中的类对象。 这里我通过 ReferenceWrapper_Stub 这个类对象绕过。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

验证:

Oracle WebLogic Two RCE Deserialization Vulnerabilities

WebLogic Console Log:

 java.lang.ClassCastException: com.sun.jndi.rmi.registry.ReferenceWrapper_Stub cannot be cast to
weblogic.rjvm.ClassTableEntry.
java.lang.ClassCastException: com.sun.jndi.rmi.registry.ReferenceWrapper_Stub cannot be cast to
weblogic.rjvm.ClassTableEntry
    at weblogic.rjvm.MsgAbbrevInputStream.readClassDescriptor(MsgAbbrevInputStream.java:410)
    at
weblogic.utils.io.ChunkedObjectInputStream$NestedObjectInputStream.readClassDescriptor(ChunkedO
bjectInputStream.java:284)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1564)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)
    Truncated. see log file for complete stacktrace

总结

可能目前谈到weblogic漏洞的挖掘,马上想到的是反序列化漏洞。依照之前多次补丁更新的迹象,虽然可能还是会 有新的绕过,但是能够使用的gadget越来越少,会让漏洞的利用难度提高很多。其实,我在阅读weblogic代码的过 程中发现,很多在 java 中常见的漏洞:文件下载、上传、SSRF、XXE、DoS…这些漏洞也都存在,并且利用简单方便。 或许,试着找些其他类型的漏洞配合使用,也是可以达到远程代码执行的效果。


以上所述就是小编给大家介绍的《Oracle WebLogic Two RCE Deserialization Vulnerabilities》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning JavaScript

Learning JavaScript

Shelley Powers / Oreilly & Associates Inc / 2006-10-17 / $29.99

As web browsers have become more capable and standards compliant, JavaScript has grown in prominence. JavaScript lets designers add sparkle and life to web pages, while more complex JavaScript has led......一起来看看 《Learning JavaScript》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具