Apache Struts2再曝远程代码执行漏洞,云安全带您一探究竟
【前言】
2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为CVE-2017-9805(S2-052)。漏洞一出,华为云安全团队马上对最新漏洞做了全面的分析,对这个神秘又高危的漏洞一探究竟。
【漏洞概述】
影响版本
2008之后的所有版本均受影响,所有使用该框架的RESTFUL API插件的网站均存在漏洞(官方2017年9月5日发布的Struts-2.5.13最新补丁版除外)。
根因简介
插件中使用到的XStreamHanlder在对xml input(攻击者可控)进行反序列化处理之前,没有做任何安全过滤检查。
漏洞发现人
发现人为LGTM(一个开源的代码分析工具)的一名员工,在利用QL(lgtm的一种查询语言)编写针对不安全的java反序列化检测发现的(稍微研究了下,其原理是利用了污点追踪的技术,讲道理Taint Tracking在二进制内存污点动态追踪和静态源码级的代码审计还是很6的)。
【漏洞分析】
基于源码patch对比的漏洞分析
首先根据官网的漏洞描述(https://struts.apache.org/docs/s2-052.html), 其中Problem描述:The REST Plugin is using a XStreamHandler with an instance of XStream for deserialization without any type filtering and this can lead to Remote Code Execution when deserializing XML payloads。简单的说,就是其中的一个REST插件在反序列化XML Payload的时候,利用了XStreamHandler这个类,而这个类的实例在反序列化前,没有对输入做任何的安全过滤,导致了悲剧。。。
下面来看下Struts插件描述的配置
struts插件描述xml配置
struts-plugin.xml(path:"./src/plugins/rest/src/main/resources/struts-plugin.xml")
图一:struts插件描述xml配置
上述配置文件中,针对xml的反序列化,利用了org.apache.struts2.rest.handler.XStreamHandler类
接下来再看下这个XStreamHandler类的代码
XStreamHandler类源码分析
在Struts-2.5.13(2017年9月5日紧急补丁版本)之前的版本中(我们选取了2.5.10.1版本),其中XStreamHandler.java(path:"/src/plugins/rest/src/main/java/org/apache/struts2/rest/handler/XStreamHandler.java")中代码如下:
图二: XStreamHandler类源码(2.5.10.1版本)
一目了然,上述代码中,toObject方法为反序列化方法,但在整个反序列过程没有对Reader in的in参数做安全过滤检查,从而导致远程命令注入
Struts-2.5.13patch版本源码对比
我们对比了Struts-2.5.13(2017年9月5日紧急补丁版本)版本中的的XStreamHandler.java(path: "/src/plugins/rest/src/main/java/org/apache/struts2/rest/handler/XStreamHandler.java")的patch情况,部分代码如下:
图三: XStreamHandler类源码(2.5.13版本)
上述代码在之前版本的基础上,主要增加了两个方法addPerActionPermission和addDefaultPermissions,并在createXStream方法中,在实例化一个XStream()对象后,首先调用stream.addPermission(NoTypePermission.None)在擦除其现有的全部权限,然后调用上述两个方法添加action的授权和默认的授权。
【如何利用】
该漏洞与以往的java反序列化漏洞相比,利用简单,因为input,用户可控,因此只需要利用该REST API,POST 格式为xml的payload即可利用,具体的payload生成可利用该工具 https://github.com/mbechler/marshalsec
图四:漏洞复现
【如何防御?】
建议更新至struts-2.5.13版本,不过官网描述该版本可能会存在一点兼容问题。
而我们的华为云WAF安全团队(即web应用防火墙)已经紧急分析了该漏洞的攻击模式并提取了防御的特征规则。
【References】
https://struts.apache.org/docs/s2-052.html
https://struts.apache.org/announce.html#a20170905
http://archive.apache.org/dist/struts/2.5.10.1/struts-2.5.10.1-src.zip
http://ftp.tsukuba.wide.ad.jp/software/apache/struts/2.5.13/struts-2.5.13-src.zip
https://github.com/mbechler/marshalsec
https://lgtm.com/blog/apache_struts_CVE-2017-9805_announcement
https://lgtm.com/blog/apache_struts_CVE-2017-9805
本文作者by:九日可可
- 点赞
- 收藏
- 关注作者
评论(0)