β

Weblogic CVE-2018-3191分析

Harries Blog™ 175 阅读

背景

北京 时间 10月17日, Oracle 官方发布的10月关键补丁更新CPU(Critical Patch Update)中修复了一个高危的WebLogic远程 代码 执行 漏洞 (CVE-2018-3191)。该漏洞允许未经身份验证的攻击者通过T3 协议 网络访问并破坏易受攻击的WebLogic Server,成功的漏洞利用可导致WebLogic Server被攻击者接管,从而造成远程代码执行。这个漏洞由Matthias Kaiser,loopx9,Li Zhengdong申报。

补丁分析

如下图所示

这回的补丁主要增加了两个大类黑名单,分别是 java . rmi .server.RemoteObject和com.bea. core .repackaged. spring framework.transaction.support.AbstractPlatformTransactionManager,RemoteObject是用于修补漏洞编号为CVE-2018-3245的漏洞,当时笔者在报这个漏洞的过程中就将所有涉及到RemoteObject相关的poc都提交给了Oracle官方。AbstractPlatformTransactionManager这个黑名单就是用于防止Spring JNDI注入,从官方以前的黑名单上就能看到org.springframework.transaction.support.AbstractPlatformTransactionManager,但是官方没有想到在com.bea.core.repackaged的相关包还有spring的相关类。其实这两个包中的类实现几乎一样,只是来源于不同的包。

动态分析

通过前一章的静态分析已经知道CVE-2018-3191所对应的补丁,就是AbstractPlatformTransactionManager,用于防止Spring JNDI注入。在我们的PoC中主要用到JtaTransactionManager这个类。下面来看一下这个类中关键的几个地方。

JtaTransactionManager类继承自AbstractPlatformTransactionManager,实现了Seriali zab le接口,其中私有属性userTransactionName是用于JNDI寻址。 在Java反序列化中,入口有很多,readObject是最常见的,定位到JtaTransactionManager.readObject方法,实现如下:

继续跟踪initUserTransactionAndTransactionManager方法的实现:

在 initUserTransactionAndTransactionManager的方法中就有基于JNDI寻址方法lookupUserTransaction 关键寻址部分代码如下:

有了如上的分析,构造PoC也是水到渠成,下面是PoC的关键代码:

更详细的关于JNDI的使用可参考作者以前的博文,这里不再重复。漏洞效果如下图:

Weblogic CVE-2018-3191分析

由于这个漏洞利用的gadget是 web logic中自带的,跟JDK版本无关,所以只要系统能连外网,未禁止T3协议,漏洞就可以利用,威力巨大,请尽快升级到Weblogic最新版。

原文

https ://mp.weixin.qq.com/s/ebKHjpbQcszAy_vPocW0Sg

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。 PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处: Harries Blog™ » Weblogic CVE-2018-3191分析

作者:Harries Blog™
追心中的海,逐世界的梦
原文地址:Weblogic CVE-2018-3191分析, 感谢原作者分享。

发表评论