关于做好Apache Struts2 高危漏洞管理和应急工作的安全公告

2017-07-08 12:48:53

安全公告编号:CNTA-2017-0054

近日,国家信息安全漏洞共享平台(CNVD)收录了Apache Struts2 S2-048远程代码执行漏洞(CNVD-2017-13259,对应CVE-2017-9791),漏洞利用代码已在互联网公开,8日凌晨起互联网上已经大量的攻击尝试并已有若干漏洞案例报告。针对近年来ApacheStruts2频繁出现高危风险,在相关案例中国内漏洞管理和应急工作出现一些较为被动的情况,CNVD就本次S2-048漏洞风险和做好相关高危漏洞管理和应急工作,提出相关建议:

一、S2-048漏洞风险情况

Struts2是第二代基于Model-View-Controller (MVC)模型的java企业级web应用框架,是较为流行的容器软件中间件。2017年7月7日,Apache Struts 发布最新的安全公告,Struts2 存在远程命令执行漏洞(命名编号为S2-048)。漏洞成因为Showcase 应用演示Struts2 整合Struts 1 的插件中存在一处任意代码执行缺陷,当应用使用了Struts2 Struts1 的插件时,用户可以构造特定输入(一般为Header字段的OGNL表达式)发送到ActionMessage 类中可导致命令执行,进而获得服务器主机系统权限。CNVD对该漏洞的综合评级为“高危”。漏洞影响使用Struts 1插件的Struts 2.3.x版本,修复建议措施另附。

7月8日上午CNVD接收到安全研究者报告的涉及若干网站案例,有将S2-045案例误报为S2-048漏洞的情况。根据CNVD秘书处抽样测试结果(>1000个网站案例,以在S2-045漏洞中受到影响的案例为主),受S2-048漏洞影响的Apache Struts2网站比例约为0.6%,暂未发现党政机关和重要用户单位案例。CNVD认为,由于有一定利用前提且影响版本范围限于2.3.x版本,之前针对S2-045漏洞的升级措施以及国内安全厂商8日凌晨实施的用户侧应急防护发挥了积极作用,S2-048漏洞范围影响较S2-045漏洞要小得多。

二、Apache Struts 2漏洞应急案例经验教训

回顾2016年以来针对ApacheStruts 2存在的S2-032、S2-045等漏洞的应急工作案例,主要存在漏洞详情披露不当、漏洞信息报告和应急准备不充分等问题。2016年4月下旬,在官方发布S2-032漏洞不到一周时间内,发现漏洞的国内安全厂商就公开了漏洞详细分析情况,致使利用代码开始出现并大范围传播,导致大规模攻击威胁,漏洞详情的不当披露成为了黑客发起攻击的“帮手”。2017年3月“两会”期间,官方发布S2-045漏洞但利用方法可通过补丁逆向分析获得且在互联网快速传播。由于漏洞风险信息未提前向国内网络安全主管部门和应急组织报告,致使党政机关、重要行业单位网站在未获得有效应急时间窗口的情况下受到大规模攻击威胁。本次S2-048漏洞的报告和应急准备工作也存在与S2-045案例相同的问题。

三、做好高危漏洞管理和应急工作的建议

按照《网络安全法》有关规定(如第二十六条:开展网络安全认证、检测、风险评估等活动,向社会发布系统漏洞、计算机病毒、网络攻击、网络侵入等网络安全信息,应当遵守国家有关规定),参照主管部门制定的《国家网络安全事件应急预案》、《公共互联网网络安全应急预案》和国家技术标准(如:《GB/T 30276-2013 信息安全技术 信息安全漏洞管理规范》)以及正在制定的《个人信息和重要数据出境安全评估办法》等规定,针对Apache Struts 2等软硬件产品高危漏洞管理和应急存在的问题,CNVD提出如下两方面建议:

一是加强学习,提高认识。国内网络安全从业者应树立守法意识,加强对法律法规和部门规定的学习。目前网络安全监管还正处于不断完善的阶段,从业者应充分领会主管部门提出的管理思路和要求,围绕保障国家关键信息基础设施、保障行业和个人信息安全、共同提升国内网络安全防护水平等工作大局,自觉遵守和执行有关规定和要求。

二是完善流程,协同自律。加强对有可能对国内用户造成大规模威胁的漏洞的前置管理,在“漏洞修复”、“威胁消除”等环节给国内党政机关、重要行业单位以及广大用户预留必要的准备时间。重点从漏洞发现和报告环节入手,密切配合国家网络安全主管部门和应急组织提出的工作要求,完善报告策略和处理流程。加强行业自律,不得从企业和个人利益出发,做出有损于或不利于共同安全利益的漏洞报告和披露行为。

参考链接:

http://www.npc.gov.cn/npc/xinwen/2016-11/07/content_2001605.htm

http://www.cac.gov.cn/2017-06/27/c_1121220113.htm

http://www.cac.gov.cn/2017-04/11/c_1120785691.htm

https://cwiki.apache.org/confluence/display/WW/S2-048

https://cwiki.apache.org/confluence/display/WW/S2-045

https://cwiki.apache.org/confluence/display/WW/S2-032

http://www.cnvd.org.cn/flaw/show/CNVD--2017-13259

(注:CNVD合作方漏洞盒子(属上海斗象信息科技有限公司)及时报告了S2-048漏洞详情,同时CNVD技术组成员单位奇虎360公司、杭州安恒公司、绿盟科技公司、恒安嘉新公司、天融信公司也报告相关分析情况)


另附:S2-048漏洞修复措施

官方已在Struts 2.5.10.1版本中修复了该漏洞,请参考官网及时升级:http://struts.apache.org/download.cgi#struts25101。同时未能及时升级的可以参照官方给出的临时解决方案,或启用已生成有针对性防护策略的国内厂商网络侧防护产品(如:防火墙、云WAF等)。

临时解决方案:

应使用资源键(resource keys),而不是将原始消息直接传递给ActionMessage类。正确和错误的方式如下所示:

(正确的方式)messages.add("msg",newActionMessage("struts1.gangsterAdded", gform.getName()));

(错误的方式)messages.add("msg",new ActionMessage("Gangster " + gform.getName() + " wasadded"));