Struts2 REST插件漏洞处置手册
2017-12-05
漏洞概述
北京时间2017年12月1日下午,Struts官方公开了REST 插件的漏洞S2-054(CVE-2017-15707)和S2-055(CVE-2017-7525)。
S2-054:该漏洞源于REST插件引用的一个过时的JSON-lib库,当请求中包含有特制的JSON payload,服务器端通过JSON-lib对数据解析时,可造成拒绝服务攻击。
S2-055:由于Struts2 框架引用的存在反序列化漏洞的Jackson组件,攻击者可在提交的json数据中嵌入恶意代码,服务器端通过Jackson组件对json数据解析时,会导致远程代码执行。
详情请参考如下链接:
https://cwiki.apache.org/confluence/display/WW/S2-054
https://cwiki.apache.org/confluence/display/WW/s2-055
影响范围
受影响的版本
-Struts 2.5 – Struts 2.5.14
不受影响的版本
-Struts 2.5.14.1
漏洞检测
手工排查
S2-054:
在项目中查找是否使用json-lib-2.4-jdk15.jar,如果使用了该jar包,说明存在风险。
S2-055:
jackson-databind 组件被RedHat官方通告存在反序列化漏洞(CVE-2017-7525),相关信息科参考https://access.redhat.com/security/cve/CVE-2017-7525,Struts 2.5x版本中引用了存在漏洞的json-databind组件,可导致未授权用户可以执行任意代码,
可在项目中找到以下jackson相关的jar包文件,判断引用的组件版本是否受影响,
jackson-annotations jackson-core jackson-databind |
如果上述jar包版本低于截图所示的2.9.2版本,则该系统存在远程代码执行的风险。
防护方案
升级Struts2框架
1. 升级Struts2框架可有效防护S2-054和S2-055漏洞。登录到官网下载页面,找到Struts 2.5.14.1,访问连接如下:
http://struts.apache.org/download.cgi#struts2514.1
2. 点击下载依赖包struts-2.5.14.1-lib.zip,解压后进入lib目录。
3. 进入web应用的依赖包目录(web应用名称WEB-INFlib),不影响业务的前提下,在struts 2.5.14.1的lib目录中找到对应的jar包进行替换。
临时解决方案
若您由于一些原因暂时不能升级Struts 2整体框架,可参考如下方案,对S2-054和S2-055漏洞进行临时防护。
参考官方的建议,针对S2-054漏洞,使用Jackson框架作为JSON ContentTypeHandler来替换默认的JSON-lib,可对该漏洞进行有效防护。但是由于Jackson存在S2-055反序列化漏洞,因此在替换JSON-lib后,还需更新Jackson版本。具体操作如下:
1. 使用Jackson替换JSON-lib:
1. 在项目中添加Jackson依赖,打开pom.xml文件,在“
|
其中2.9.2为最新的Jackson版本,该版本修复了S2-055漏洞。
2. 设置Jackson Content Handler为默认Content Handler,参考下面的语句,在struts.xml找到相应的配置并进行修改:
|
参考链接如下:
http://struts.apache.org/plugins/rest/#use-jackson-framework-as-json-contenttypehancont
2. 更新Jackson:
1. 登录到官网的下载页面,找到Struts 2.5.14.1,访问连接如下:
http://struts.apache.org/download.cgi#struts2514.1
2. 点击下载依赖包:struts-2.5.14.1-lib.zip
3. 将下载的依赖包解压后,找到以下jar包后,替换到项目中。
jackson-annotations-2.9.0.jar jackson-core-2.9.2.jar jackson-databind-2.9.2.jar |
以Struts2 2.5.24为例,请替换以下jar包。
jackson-annotations-2.8.0.jar -- jackson-annotations-2.9.0.jar jackson-core-2.8.2.jar -- jackson-core-2.9.2.jar jackson-databind-2.8.2.jar -- jackson-databind-2.9.2.jar |
声 明
本安全公告仅用来描述可能存在的安全问题,44118太阳成城集团不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,44118太阳成城集团以及安全公告作者不为此承担任何责任。
44118太阳成城集团拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经44118太阳成城集团允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。