WebLogic CVE-2018-2628漏洞 修复说明手册

事件概要:

北京时间418日凌晨,Oracle官方发布了4月份的关键补丁更新CPUCriticalPatchUpdate,其中包含一个高危的Weblogic反序列化漏洞(CVE-2018-2628),通过该漏洞,攻击者可以在未授权的情况下远程执行代码。攻击者只需要发送精心构造的T3协议数据,就可以获取目标服务器的权限。攻击者可利用该漏洞控制组件,影响数据的可用性、保密性和完整性。

BUG 描述

此漏洞产生于Weblogic T3服务,所有开放Weblogic控制台端口的应用,均会默认开启T3服务,因此会造成较大范围的影响。根据绿盟态势感知平台查询的结果,在全球范围内对互联网开放Weblogic服务的资产数量多达19,229,其中归属中国地区的受影响资产数量为1,787

BUG 影响

BUG为高危级!

由于此漏洞产生于Weblogic T3服务,当开放Weblogic控制台端口(默认为7001端口)时,T3服务会默认开启,因此会造成较大影响,结合曾经爆出的WeblogicWLS 组件漏洞(CVE-2017-10271),不排除会有攻击者利用挖矿的可能,因此,建议受影响企业用户尽快部署防护措施。

===============================================

受影响的版本

       1.Weblogic 官方还在支持的版本

Weblogic Server 10.3.6.0

Weblogic Server 12.1.3.0

Weblogic Server 12.2.1.2

Weblogic Server 12.2.1.3

2.Weblogic 官方不在支持的版本

Weblogic Server 9

WeblogicServer 10

WeblogicServer 10.3

WeblogicServer 11g(除上述版本外)

Weblogic Server 12c(除上述版本外)

====================================================

BUG 补丁

Oracle官方发布补丁,见下表:

WLS Release

Required Patches

12.2.1.3

PSU 12.2.1.3.180417 (Patch 27342434)

12.2.1.2

PSU 12.2.1.2.180417 (Patch 27338939)

12.1.3.0

PSU 12.1.3.0.180417 (Patch 27419391)

10.3.6.0

PSU 10.3.6.0.180417 (Patch 27395085)

临时方案

方案一:

注:此方案会禁止所有t3协议访问,会导致无法使用命令行停止weblogic

1.进入Weblogic控制台,在base_domain的配置页面中,进入安全选项卡页面,点击筛选器,进入连接筛选器配置

2.在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:* * 7001 deny t3 t3s

3.保存后需要重新启动,规则方可生效。

使用检测脚本,可看到防护效果已经生效

方案二:

注:此方案可以添加允许的t3协议访问,会禁止其他的未添加的t3协议访问,添加允许访问的ip后不会导致无法使用命令行停止weblogic。(推荐使用此方案)

1. 进入Weblogic控制台,在base_domain的配置页面中,进入安全选项卡页面,点击筛选器,进入连接筛选器配置

2. 在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中

输入:ip * * allow t3 ip为允许的ip

0.0.0.0/0 * *deny t3 t3s

注:如果受管节点与管理节点不在同一ip上时,需要把受管节点ip添加为允许ip

3.保存后需要重新启动,规则方可生效。

使用检测脚本,可看到防护效果已经生效:

注:连接筛选器规则格式如:target  localAddress localPort action protocols,其中:

target 指定一个或多个要筛选的服务器。

localAddress 可定义服务器的主机地址。(如果指定为一个星号 (*),则返回的匹配结果将是所有本地 IP 地址。)

localPort 定义服务器正在监听的端口。(如果指定了星号,则匹配返回的结果将是服务器上所有可用的端口)

action 指定要执行的操作。(值必须为“allow”“deny”)

protocols 是要进行匹配的协议名列表。(必须指定下列其中一个协议:httphttpst3t3sgiopgiopsdcom ftp) 如果未定义协议,则所有协议都将与一个规则匹配。

解决方案(安装补丁PSU20180417

10.3.6补丁安装(目前无效)

注:对于10.3.6版本,目前发现更新补丁后,使用漏洞验证脚本进行测试,发现该漏洞没有被修复,因此对于该版本,推荐使用临时方案进行漏洞修复。至于进一步的进展,我们也会随时关注Oracle官方的说明。

1、使用weblogic安装用户登录到中间件服务器;

2、关闭所有的weblogic节点;

3、weblogic安装路径(如:weblogic/Oracle/middleware/wls1036/)下,进入bsu文件夹如:weblogic/Oracle /middleware/wls1036/utils/bsu

4、执行”./bsu.sh” 生成cache_dir文件夹

5、使用FTP以二进制方式将补丁包上传到cache_dir目录中

6进入cache_dir目录,解压补丁包“unzip p27395085_1036_Generic.zip

7、进入bsu目录执行上述配置好的命令:

8、验证安装:

1)通过bsu命令验证检查; 

2)通过启动日志验证:启动weblogic服务,在后台的输出信息中看到 10.3.6.0.180417”版本字样,表示安装成功;

3)通过console页面验证:登录weblogic的控制台,进入左侧 “环境”-> 服务器 ,选择其中任意一个服务器,之后进入“监视”->“一般信息”可查看指定server的详细版本号,验证补丁安装成功;

9、补丁回退, 执行命令

检查回退结果:

10、注意事项:

执行bsu.sh报错java.lang.OutOfMemoryError: Java heap space

解决办法:

修改bsu.sh中的内存参数为MEM_ARGS="-Xms4096m -Xmx4096m"

12.1.3补丁安装(目前无效) 

注:对于12c版本,目前发现更新补丁后,使用漏洞验证脚本进行测试,发现该漏洞没有被修复,因此对于该版本,推荐使用临时方案进行漏洞修复。至于进一步的进展,我们也会随时关注Oracle官方的说明。

WebLogic 12c版本开始,WebLogic 更新了更新补丁的方式,改由opatch执行更新。

以下步骤适用于所有12c版本。

1.检查ORACLE_HOME环境变量为已安装的ORACLE WEBLOGIC SERVER的目录

2.停止所有的服务器(AdminServer和所有Managed服务器)

3.设置环境变量

export JAVA_HOME=/usr/java/jdk1.7.0_79

export JAVA_BIN=/usr/java/jdk1.7.0_79/bin

export PATH=$JAVA_HOME/bin:$PATH

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export ORACLE_HOME=/home/weblogic/Oracle/Middleware/Oracle_Home

注:斜体加粗部分需要针对定制环境修改

4.进入Opatch目录中将补丁程序zip文件压缩到tmp_dirunzip –dtmp_dir/ p27419391_121300_Generic.zip

5.进入解压目录并执行opatch,执行 opatch安装命令

cd tmp_dir/27419391     

$ORACLE_HOME/OPatch/opatchapply-jdk$JAVA_HOME

6.验证补丁是否安装

$ORACLE_HOME/OPatch/opatchlsinventory 

已打补丁的输出中可以看到如下字样

卸载补丁

若在安装该补丁程序时遇到任何问题,请将该补丁删除

1.停止所有的服务器(AdminServer和所有Managed服务器)

2.运行opacth卸载该补丁程序

$ORACLE_HOME/OPatch/opatchrollback -id 27419391

3.重新启动所有服务器(AdminServer和所有托管服务器)

漏洞验证

使用python脚本检查漏洞是否存在

先决条件

客户机安装python2.7以上版本,并且安装pythonrequests组件

执行脚本

链接如下:https://github.com/shengqi158/CVE-2018-2628

注:脚本源自网络

测试结果

在没有打补丁时,执行脚本,结果为:

打补丁后,执行脚本,结果为:

使用临时方法后,执行脚本,结果为:

如果服务器端weblogic没有启动,会返回False的错误: