关于Apache Struts2存在S2-045远程代码执行漏洞的安全公告

14.03.2017  16:31
关于Apache Struts2存在S2-045远程代码执行漏洞的安全公告  
一、漏洞描述
Struts2是第二代基于Model-View-Controller(MVC)模型的java企业级web应用框架,并成为当时国内外较为流行的容器软件中间件。jakarta是apache组织下的一套Java解决方案的开源软件的名称,包括很多子项目。Struts就是jakarta的紧密关联项目。
基于JakartaMultipart parser的文件上传模块在处理文件上传(multipart)的请求时候对异常信息做了捕获,并对异常信息做了OGNL表达式处理。但在在判断content-type不正确的时候会抛出异常并且带上Content-Type属性值,可通过精心构造附带OGNL表达的URL导致远程代码执行。利用该漏洞,攻击者可通过发送恶意构造的HTTP数据包,在受影响服务器上执行系统命令,进一步可完全控制该服务器,造成拒绝服务、数据泄露、网站造篡改等影响。该漏洞的利用无需任何前置条件(如开启dmi,debug等功能),也无须启用任何插件,危害极为严重。
二、影响范围
该漏洞影响范围极广,影响国内外绝大多数使用Struts2开发框架的站点。受漏洞影响的版本为:Struts2.3.5-Struts2.3.31, Struts2.5-Struts2.5.10。目前,互联网上已经公开了漏洞的攻击利用代码,同时已有安全研究者通过CNVD网站、补天平台提交了多个受漏洞影响的省部级党政机关、金融、能源、电信等行业单位以及知名企业门户网站案例。
三、处置建议
Apache Struts官方已在发布的新的版本中修复了该漏洞。建议使用Jakarta Multipartparser模块的用户升级到Apache Struts版本2.3.32或2.5.10.1。除了升级struts版本外,为有效防护漏洞攻击,建议用户采取主动检测、网络侧防护的方法防范黑客攻击:
(一)无害化检测方法:
在向服务器发出的http请求报文中,修改Content-Type字段:
Content-Type:%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('vul','vul')}.multipart/form-data,如返回response报文中存在vul:vul字段项则表明存在漏洞。
(二)网络侧防护技术措施
建议在网络防护设备上配置过滤包含如下#nike='multipart/form-data' 以及#container=#context['com.opensymphony.xwork2.ActionContext.container'字段串(及相关字符转义形式)的URL请求。