7月7日,Apache Struts 发布最新的
安全公告,Struts2 存在远程命令执行漏洞(命名编号为S2-048)。国家信息
安全漏洞共享平台(CNVD)已将该漏洞收录为高危漏洞(编号:CNVD-2017-13259),
攻击者可以利用该漏洞获取服务器
主机系统权限。目前,漏洞利用代码已在
互联网上公开。从8日凌晨起,
互联网上已经出现了大量的
攻击尝试且存在若干实现漏洞利用的案例报告。具体情况如下:
一、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版本,并存在一定的漏洞利用前提限定。在漏洞公开后,国内安全厂商在用户侧也开展了积极的应急防护。CNCERT抽样监测发现S2-48漏洞未产生严重安全问题。
根据CNCERT抽样测试结果(>1000个
网站案例,以在S2-045漏洞中受到影响的案例为主),受S2-048漏洞影响的Apache Struts2
网站比例约为0.6%,暂未发现党政机关和重要信息系统用户单位案例。
三、漏洞修复建议
官方已在Struts 2.5.10.1版本中修复了该漏洞,请参考官网及时升级:http://struts.apache.org/download.cgi#struts25101。同时,未能及时升级的系统可以参照官方给出的临时解决方案,或启用已生成有针对性防护策略的国内厂商
网络侧防护产品(如:防火墙、云WAF等)。
临时解决方案:应使用资源键(resource keys),而不是将原始消息直接传递给ActionMessage类。正确和错误的方式如下所示:
(正确的方式)messages.add("msg",new ActionMessage("struts1.gangsterAdded", gform.getName()));
(错误的方式)messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));