From: S2-52 分析(含POC)
0x01 漏洞描述
2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。
Struts2启用了rest-plugin后并编写并设置了XStreamHandler后,可以导致远程命令执行这一严重问题。
xxlegend师傅已经分析了官方缓解措施无效《S2-052漏洞分析及官方缓解措施无效验证》
建议升级到Struts 2.5.13 or Struts 2.3.34
0x02 测试环境
使用struts官方showcase, 2.5.12、2.3.33及以下,下载地址: https://archive.apache.org/dist/struts/ 。
载入工程,apps目录下rest-showcase为可进行。
0x03 漏洞分析
struts2的ContentTypeInterceptor会根据ContentType、url后缀寻找响应的处理handler,并调用handler相关的反序列化函数。xml形式的restfull请求转至XStreamHandler进行处理。
struts2-rest-plugin请求处理handler定义:
XStreamHandler在没有进行任何验证的情况下直接反序列化xml形式的数据。
这里在调试的是否发现一坑,反序列化的栈中若只有一个对象,将会导致直接返回toObject函数传入的target对象。
0x04 POC执行
目前公布的POC由于使用了jdk.nashorn,javax.imageio,需要用jdk1.8以上。
POC执行链
最终在ImageIO$ContainsFilter.filter中触发POC构造的命令执行