Struts2的代码执行问题最早要追溯到2010年,当时来自Google安全Team的Meder Kydyraliev发现可以通过用unicde编码的形式绕过参数拦截器对特殊字符“#”的过滤,造成代码执行问题,官方漏洞编号S2-003,虽然Apache官方给出了利用代码,但是对却忽视了这个漏洞的威力,因为官方看到Meder Kydyraliev给出的代码以为就是一个简单的bypass,没有意识到利用此漏洞可以远程执行任意命令,于是随意修改了一下过滤规则便草草了之了。
日前,Struts2再次爆出安全漏洞,主要影响国内电商、银行、运营商等诸多大型网站和为数众多的政府网站。国外安全研究人员日前发现,Apache Struts2在处理CVE-2014-0094的漏洞补丁中存在缺陷,会被轻易绕过,可导致任意命令执行。黑客进而能够窃取到网站数据,或者对网站进行DDoS攻击。
Struts2漏洞检测工具
4月24日,360网站卫士第一时间添加防御规则,并率先发布临时解决方案;4月25日下午,Apache官方才发布Struts2漏洞的临时修复方案;4月25日晚上,360网站安全检测率先发布“Struts2漏洞检测”工具(http://safe.webscan.360.cn/loudong)。
Struts2的该漏洞主要影响国内电商、银行、运营商等诸多大型网站。广大网站可以使用该“Struts2漏洞检测”工具检查自己的网站是否存在该漏洞。同时,网站也可以申请加入360网站卫士,以有效拦截基于Struts2漏洞的黑客攻击。
Struts2漏洞临时修复方案
Apache官方难辞其咎
回顾struts2的漏洞历史,我们发现官方难辞其咎。
首先,开发人员安全意识不强,虽然采取了基本的安全措施,但是形同虚设;其次,官方修复力度不够,给人的感觉总像是在敷衍了事,未能从根本上解决问题;再就是,官方的开放精神确实很震撼,竟然直接将漏洞的PoC挂在官网上,这样给了很多人进一步研究漏洞利用的机会,这个也是导致问题更加严重的一个原因。
近两年关于struts2的攻击事件频发,影响包括向移动、电信、联通、各大网银、证券等等各大门户网站,。因为struts2是一款功能非常强大的j2ee框架,特别是对于广大开发人员,应用非常广泛。所以一旦struts2出现0day,导致互联网上出现大面积被入侵、被拖库,信息泄露等事件。对于此问题,建议相关技术人员应及时更新struts2框架版本。有实力的公司最好自己开发应用框架,避免使用开源框架。
struts2漏洞盘点
影响比较大,利用比较广泛的struts2漏洞:
2010年 S2-005
CVE-2010-1870 XWork ParameterInterceptors bypass allows OGNL statement execution
2012年1月 S2-008
CVE-2012-0392 struts2 DevMod Remote Command Execution Vulnerability
2012年1月 S2-009
CVE-2011-3923 Struts<=2.3.1参数拦截器代码执行
2013年 5月 S2-013
CVE-2013-1966 Struts2 <= 2.3.14 includeParams属性远程命令执行漏洞
2013年7月 S2-016
CVE-2013-2251 Struts2 <= 2.3.15.1 action、redirect、redirectAction前缀远程命令执行漏洞
2014年3月 S2-020
Struts2 <= 2.3.16 DoS attacks and ClassLoader manipulation
2014年4月 S2-021
Struts2 <= 2.3.16.1 bypass patch(ClassLoader manipulation)