7月7日,Apache Struts 发布最新的安全公告,Struts2 存在远程命令执行漏洞(命名编号为S2-048)。国家信息安全漏洞共享平台(CNVD)已将该漏洞收录为高危漏洞(编号:CNVD-2017-13259),攻击者可以利用该漏洞获取服务器主机系统权限。具体情况如下:
S2-048漏洞情况分析:
Struts2是第二代基于Model-View-Controller (MVC)模型的Java企业级web应用框架,是较为流行的容器软件中间件。2017年7月7日,Apache Struts 发布最新的安全公告S2-048,漏洞成因是Showcase 应用演示Struts2 整合Struts 1 的插件中存在一处任意代码执行缺陷,当应用使用了Struts2 Struts1 的插件时,用户可以构造特定输入(一般为Header字段的OGNL表达式)发送到ActionMessage 类中可导致命令执行,进而获得服务器主机系统权限。S2-048漏洞主要影响使用Struts 1插件的Struts 2.3.x版本,并存在一定的漏洞利用前提限定。
漏洞修复建议:
1. 关闭Showcase插件。
2. 官方已在Struts 2.5.10.1版本中修复了该漏洞,请参考官网及时升级:http://struts.apache.org/download.cgi#struts25101。
3. 开发者通过使用resource keys替代将原始消息直接传递给ActionMessage的方式。 如下所示:
messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));
不要使用如下的方式:
messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));
4. 在非必要的情况下禁用struts2-struts1-plugin插件。将struts2-struts1-plugin-2.3.x.jar文件从 “/WEB-INF/lib”目录中移动到其他文件夹或者删除。