转载Struts2 S2-052 RCE分析与利用
Posted 金融本部陆吾安全实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转载Struts2 S2-052 RCE分析与利用相关的知识,希望对你有一定的参考价值。
2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。
相关链接如下:
https://cwiki.apache.org/confluence/display/WW/S2-052
https://lgtm.com/blog/apache_struts_CVE-2017-9805
在Struts2官方github上下载最新代码,发现org.apache.struts2.rest.handler这个包下多了几个类文件,分别为AbstractContentTypeHandler、AllowedClasses、AllowedClassNames、XStreamPermissionProvider。如下图所示:
XStreamHandler类修改了createXStream方法,同时增加了几个方法,作用是拒绝不安全的类执行。如下图所示:
由补丁可以发现,REST插件将XStream处理的数据进行了处理,在调用“xstream.fromXML(in,target);” 反序列化之前对其进行了检查。
根据补丁分析,构造相对应的漏洞检测数据包。使用调试工具分析,发现Action经过REST插件处理时会被ContentTypeInterceptor这个类拦截,进入intercept方法如下图所示:

这个Intercept拦截方法很重要,分三步:
第一步:getHandlerForRequest方法会判断提交的请求类型,如果是XML的话就交给XStreamHandler调用toObject方法。
第二步:如果浏览器提交的数据包长度大于0的话就获取其输入流,然后将数据包生成一个InputStreamReader对象也就是reader。
第三步:调用XStreamHandler的toObject方法将reader数据流进行xml反序列化。
如下图所示:
结合之前对补丁的分析,这里XStream并没有对reader的内容进行验证,导致反序列化漏洞。
Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,可直接在数据包中插入恶意代码,导致服务器被攻陷。漏洞复现如下图所示:
可以看到服务器回显错误,但是已经成功执行了系统命令。证明漏洞存在,并且通过远程即可实现攻击。
受影响版本
Apache Struts Version:Struts 2.5 - Struts 2.5.12
升级Struts到2.5.13最新版本
在不使用时删除StrutsREST插件,或仅限于服务器普通页面和JSONs
<constantname="struts.action.extension" value="xhtml,,json" />
部署启明星辰web应用防火墙 http://www.venustech.com.cn/SafeProductInfo/413/39.Html
本文转自启明星辰ADAlab发布预警,可点击阅读原文查看
以上是关于转载Struts2 S2-052 RCE分析与利用的主要内容,如果未能解决你的问题,请参考以下文章
漏洞 | 启明星辰ADLab:Struts2 S2-052 RCE分析与利用
转载网防G01 完美狙击Struts2 (S2-052/046/045) 漏洞利用