【安全通告】WebLogic远程代码执行漏洞 (CVE-2018-3191) 技术分析与防护方案

作者:   广州非凡信息安全技术有限公司(总部广州) 2018/12/19 10:15:53 466次阅读 国际

【安全通告】WebLogic远程代码执行漏洞(CVE-2018-3191)技术分析与防护方案
98cbeac9aabcb3d68adf262599d87c50.png


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


漏洞影响范围

Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.3

影响排查

本地检测

使用如下命令对Weblogic版本和补丁安装的情况进行排查。
$ cd /Oracle/Middleware/wlserver_10.3/server/lib
$ java -cp weblogic.jar weblogic.version
在显示结果中,如果没有补丁安装的信息,则说明存在风险,如下图所示:

远程检测

Nmap工具提供了Weblogic T3协议的扫描脚本,可探测开启T3服务的Weblogic主机。命令如下:
nmap -n -v -Pn –sV [主机或网段地址] -p7001,7002 --script=weblogic-t3-info.nse
如下图红框所示,目标开启了T3协议且Weblogic版本在受影响范围之内,如果相关人员没有安装过官方的安全补丁,则存在漏洞风险。

技术防护方案

官方修复方案

Oracle官方已经在10月关键补丁更新CPU(Critical Patch Update)中修复了该漏洞,强烈建议受影响的用户尽快升级更新进行防护。
参考链接:
https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html#AppendixFMW

https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html

注:Oracle官方补丁需要用户持有正版软件的许可账号,使用该账号登陆后,可以下载最新补丁:
https://support.oracle.com

临时解决方案

jdk升级防护

由于WebLogic采用黑名单的方式阻止恶意反序列化,此次发布的补丁仍存在被绕过的可能,最新版本的jdk引入了JEP290增强安全机制,防护因java反序列化所造成的任意代码执行,使用WebLogic的用户可通过升级jdk至最新版本对此漏洞进行防护。

jdk版本升级建议:
 jdk1.8版本升级至8u121以上
 jdk1.7版本升级至7u131以上
 jdk1.6版本升级至6u141以上

关于JEP290增强安全机制更多信息可参考:
https://blogs.oracle.com/java-platform-group/filter-incoming-serialization-data-a-little-of-jdk-9-goodness-available-now-in-current-release-families


攻击者可通过gadget绕过JEP290防护机制,对此次披露的漏洞进行利用,因此升级jdk的用户仍存在被攻击的风险,Oracle官方此次发布的补丁中增加了针对gadget利用的防护机制,建议用户及时安装补丁以保证长期有效的防护。

T3协议访问控制

漏洞编号为CVE-2018-3191、CVE-2018-3197、CVE-2018-3201、CVE-2018-3245的漏洞可通过T3协议访问控制的方法进行临时防护,漏洞CVE-2018-3252通过http协议进行远程攻击,T3协议访问控制无法对此漏洞进行防护。
用户可通过控制T3协议的访问来临时阻断针对这些漏洞的攻击。WebLogic Server 提供了名为 weblogic.security.net.ConnectionFilterImpl 的默认连接筛选器,此连接筛选器接受所有传入连接,可通过此连接筛选器配置规则,对t3及t3s协议进行访问控制,详细操作步骤如下:
1、进入WebLogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

2、在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,参考以下写法,在连接筛选器规则中配置符合企业实际情况的规则:
127.0.0.1 * * allow t3 t3s
本机IP * * allow t3 t3s
允许访问的IP * * allow t3 t3s
* * * deny t3 t3s
连接筛选器规则格式如下:target localAddress localPort action protocols,其中:
target 指定一个或多个要筛选的服务器。
localAddress 可定义服务器的主机地址。(如果指定为一个星号 (*),则返回的匹配结果将是所有本地 IP 地址。)
localPort 定义服务器正在监听的端口。(如果指定了星号,则匹配返回的结果将是服务器上所有可用的端口)。
action 指定要执行的操作。(值必须为“allow”或“deny”。)
protocols 是要进行匹配的协议名列表。(必须指定下列其中一个协议:http、https、t3、t3s、giop、giops、dcom 或 ftp。) 如果未定义协议,则所有协议都将与一个规则匹配。

3、保存后若规则未生效,建议重新启动WebLogic服务(重启WebLogic服务会导致业务中断,建议相关人员评估风险后,再进行操作)。以Windows环境为例,重启服务的步骤如下:
进入域所在目录下的bin目录,在Windows系统中运行stopWebLogic.cmd文件终止WebLogic服务,Linux系统中则运行stopWebLogic.sh文件。

待终止脚本执行完成后,再运行startWebLogic.cmd或startWebLogic.sh文件启动WebLogic,即可完成WebLogic服务重启。
若参考上述操作配置了连接筛选器后,导致WebLogic无法启动,可参考“附录B WebLogic服务恢复”章节,及时进行业务恢复。


指导单位
广东省公安厅网络警察总队 广东省信息安全等级保护协调小组办公室