360网站安全检测平台今日发布红色警报称,广泛应用在国内大型网站系统的Struts2框架正在遭到黑客猛烈攻击。利用Struts2“命令执行漏洞”,黑客可轻易获得网站服务器ROOT权限、执行任意命令,从而窃取重要数据或篡改网页,目前国内至少有3500家网站存在该高危漏洞。据乌云漏洞平台显示,运营商及金融等领域大批网站,甚至包括政府网站均受Struts2漏洞影响。
360网站安全检测服务网址:http://webscan.360.cn
Struts框架官方最新版本:http://struts.apache.org/download.cgi#struts234
Struts2“命令执行漏洞”早在2010年已经曝光,但当时没有公开的漏洞利用工具,因此并未造成过多危害。直到近期,针对该漏洞新的攻击代码在网上公开,漏洞利用工具也随之涌现,使黑客攻击完全没有门槛,80%以上应用Struts2框架的网站因此面临严重风险。
经360网站安全检测平台分析,Apache Struts2中WebWork框架使用XWork基于HTTP参数名执行操作和调用,将每个HTTP参数名处理为OGNL(对象图形导航语言)语句。为了防范攻击者通过HTTP参数调用任意方式,XWork使用了以下两个变量保护方式的执行:
- OgnlContext的属性xwork.MethodAccessor.denyMethodExecution(默认设置为true)
-SecurityMemberAccess私有字段allowStaticMethodAccess(默认设置为false)
为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的unicode字符串表示u0023,攻击者就可以绕过保护,修改保护Java方式执行的值。进一步可调用java语句来执行任意命令,甚至控制操作系统。
之前Struts2官方补丁屏蔽了黑客通过u0023 (16进制的#) 攻击的方式,但黑客仍可以利用43(8进制的#)实施突破。
鉴于Struts2“命令执行漏洞”影响网站众多,且危害巨大,360网站安全检测平台已紧急更新漏洞库,并向存在漏洞的注册网站发送示警邮件,同时建议所有使用Struts2框架的用户立即升级至官方最新版本,并定期使用360网站安全检测服务随时掌控网站安全状况。
更新Struts2最新版本为Struts2.3.15.1
首先把项目中对应的这几个包都换成上面的包,这里要特别说明一下的是commons-lang3-3.1.jar对应的(我项目中就是commons-lang-2.6.jar)是不用删除替换的,保留它就可以了,因为它不会更commons-lang3-3.1.jar产生冲突,而且commons-lang还涉及到其它包的应用比如json。改了这些后jar的升级就算完成了。
现在就修改配置文件,首先修改web.xml的Struts2的FilterDispatcher改成如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
然后就修改struts.xml的头部,修改成
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
最后把redirect-action改成redirectAction。
改了这些后就要把项目中的类出现的错误都解决了就可以正常运行项目了。