漏洞编号:

CVE-2017-5638

影响范围:

影响的软件版本

Struts2.3.5 至 Struts2.3.31

Struts2.5 至 Struts2.5.10

详细信息

漏洞详情:

Struts2是第二代基于Model-View-Controller(MVC)模型的java企业级web应用框架,并成为当时国内外较为流行的容器软件中间件。jakarta是apache组织下的一套Java解决方案的开源软件的名称,包括很多子项目。Struts就是jakarta的紧密关联项目。Struts2框架中基于JakartaMultipart parser的文件上传模块在处理文件上传(multipart)的请求时候对异常信息做了捕获,并对异常信息做了OGNL表达式处理。但在在判断content-type不正确的时候会抛出异常并且带上Content-Type属性值,可通过精心构造附带OGNL表达的URL导致远程代码执行。

验证方法:

在向服务器发出的http请求报文中,修改Content-Type字段:

Content-Type:%{#context[‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’].addHeader(‘vul’,’vul’)}.multipart/form-data,如返回response报文中存在vul:vul字段项则表明存在漏洞。

风险评估:

该漏洞的影响面较大,使用上述受影响的strtus2框架版本的网站都有被攻击的风险。由于之前struts2的高危漏洞暴露的较多,有很大一部分的网站都升级到了Struts2.3.5以上版本,这些网站都面临被攻击的风险。

安全建议

补丁更新:

apache官方已经针对该漏洞发布了版本更新用来修补这个漏洞,下列版本不受此漏洞影响:

Struts2 2.3.2 https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.32

Struts2 2.5.10.1 https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.10.1

厂商公告:https://cwiki.apache.org/confluence/display/WW/S2-045

临时解决办法:

严格过滤 Content-Type 里的内容,严禁ognl表达式相关字段。

参考信息:

  1. 厂商公告:https://cwiki.apache.org/confluence/display/WW/S2-045
  1. CNVD漏洞库信息:http://www.cnvd.org.cn/flaw/show/CNVD-2017-02474