全部产品
Search
文档中心

【漏洞公告】CVE-2017-5638:基于Jakarta plugin插件的Struts远程代码执行漏洞(S2-046)

更新时间: 2018-05-10

Apache Struts官方发布针对Struts2的漏洞公告,并将最新补丁命名为S2-046。从公布的补丁说明来看,该补丁和S2-045解决的都是CVE-2017-5638。

漏洞详情见下文。


漏洞编号

CVE-2017-5638

漏洞名称

基于Jakarta plugin插件的Struts远程代码执行漏洞(S2-046)

官方评级

高危

漏洞描述

该漏洞是在使用Jakarta Multipart解析器执行文件上传时可能的RCE(类似于S2-045)。

漏洞利用条件和方式

黑客通过Jakarta文件上传插件,构建文件名内容来构造恶意的OGNL内容,远程利用该漏洞执行代码。S2-046有以下两种利用方式:

  • Content-Disposition的filename存在空字节。

  • Content-Disposition的filename不存在空字节。

    其中,当Content-Disposition的filename不存在空字节并想要利用成功的话,还需要满足以下两个条件:

    • Content-Length 的长度值需超过Struts2允许上传的最大值(2M)。

    • 数据流需要经过JakartaStreamMultiPartRequest。在Struts使用Jakarta默认配置时,数据流并没有经过JakartaStreamMultiPartRequest,如果struts.xml包括以下配置,则说明数据流经过了JakartaStreamMultiPartRequest:

      1. <constant name="struts.multipart.parser" value="jakarta-stream" />

漏洞影响范围

  • Struts 2.3.5 - Struts 2.3.31
  • Struts 2.5 - Struts 2.5.10

漏洞修复建议(或缓解措施)

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

  • 如果您使用基于Jakarta插件,强烈建议您升级到Apache Struts 2.3.32或2.5.10.1版本。

  • 您可以使用阿里云云盾态势感知检测是否存在此漏洞,并使用阿里云云盾WAF进行防护。

注意:在升级前请做好快照备份。

情报来源

[1]. http://struts.apache.org/docs/s2-045.html
[2]. http://struts.apache.org/docs/s2-046.html
[3]. https://community.hpe.com/t5/Security-Research/Struts2-046-A-new-vector/ba-p/6949723#