漏洞概述
Oracle官方发布了7月份的关键补丁更新CPU(Critical Patch Update),其中包含一个启明星辰ADLab安全研究人员发现并通报给Oracle的高危远程代码执行漏洞(CVE-2018-2893),通过该漏洞攻击者可以在未授权的情况下远程执行任意代码。该漏洞通过JRMP 协议利用RMI机制的缺陷达到执行任意反序列化代码的目的。攻击者可以在未授权的情况下将payload封装在T3协议中,通过对T3协议中的payload进行反序列化,从而实现对存在漏洞的WebLogic组件进行远程攻击,执行任意代码并可获取目标系统的所有权限。
漏洞影响范围
WebLogic 10.3.6.0
WebLogic 12.1.3.0
WebLogic 12.2.1.2
WebLogic 12.2.1.3
以上均为官方支持的版本。
基础知识
T3协议
WebLogic Server 中的 RMI 通信使用 T3 协议在WebLogic Server和其他 Java程序(包括客户端及其他 WebLogic Server 实例)间传输数据(序列化的类)。由于WebLogic的T3协议和Web协议共用同一个端口,因此只要能访问WebLogic就可利用T3协议实现payload和目标服务器的通信。
JRMP协议
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP协议是专为Java的远程对象制定的协议。
漏洞简析
为了阻止恶意反序列化,WebLogic已经设置了8个黑名单。如下图所示:
并且对commons.collections这个包也做了限制。核心利用类调用readObject方法反序列化时都进行了检查。如下图所示:
但经过启明星辰ADLab安全研究人员深入研究分析后发现,JDK固有类中存在可被序列化并且在反序列化时可以调用RMI的类,使用该类可构造出绕过WebLogic黑名单以及commons.collections限制的payload,ADLab第一时间通报给Oracle官方并获得相应的漏洞编号(CVE-2018-2893)。
解决方案
关注Oracle官方CPU更新补丁
控制T3协议的访问
此漏洞产生于WebLogic的T3服务,因此可通过控制T3协议的访问来临时阻断针对该漏洞的攻击。当开放WebLogic控制台端口(默认为7001端口)时,T3服务会默认开启。
具体操作:
(1)进入WebLogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。
(2)在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:127.0.0.1 allow t3 t3s,0.0.0.0/0 deny t3 t3s(t3和t3s协议的所有端口只允许本地访问)。
(3)保存后需重新启动,规则方可生效。
升级到 jdk-8u20以上的版本