首页 » NetworkSec » Penetration » 正文

Apache Struts2再曝RCE漏洞(s2-046 CVE-2017-5638)

1.概述:

这次的s2-046和之前的s2-045相似,也是RCE漏洞,也是BuildErrorMessage,也是执行ognl……,但是攻击向量不同,这次漏洞编号都没变。

2.什么是apache、struts?

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。众所周知的SSH框架就是用了struts2。

3.漏洞原因:
使用恶意的Content-Disposition值或者使用不合适的Content-Length头就可能导致RCE。

所以此洞的触发如下:

(1)JakartaStreamMultipartRequest已开启。也就是说,Struts2需要通过Jakarta stream parser配置(非默认)。在Struts2配置文件中检查<constant name=”struts.multipart.parser” value=”jakarta-stream” />

(2)上传文件的大小(由Content-Length头指定)大于Struts2允许的最大大小(2GB)。

(3)header中的Content-Disposition中包含空字节。

(4)文件名内容构造恶意的OGNL内容。

官方链接:http://struts.apache.org/docs/s2-046.html

4.修复方案:
4.1.如果你正在使用基于Jakarta的文件上传Multipart解析器,请将Apache Struts升级到2.3.32或2.5.10.1。

4.2.采用其他Mutipart解析器实施方案。Apache提供2个插件作为解决方案(点击这里)——如果使用的是Apache Struts 2.3.8 – 2.5.5或者2.3.20 – 2.5.5版本,即可采用该解决方案。

4.3.从堆中移除File Upload Interceptor,定义自有堆并设为默认(具体怎么做可以点击这里),该解决方案针对Struts 2.5.8 – 2.5.10有效

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

 

5.参考链接:
http://www.freebuf.com/vuls/129871.html

http://bobao.360.cn/learning/detail/3571.html

 

 

 

 

Comment