Struts 2.3.15版本被曝出存在重要的安全漏洞,主要问题如下
1、可远程执行服务器脚本代码
用户可以构造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的路径和参数,比如fdisk -f等,造成破环系统无法圆形的目的。
2、重定向漏洞
二、解决方法
思路:更换Struts2 Jar包。
以下是具体的步骤:
1、登录Struts2官网,http://struts.apache.org/download.cgi#struts23151(具体的下载页面),下载版本为2.3.15.1的,struts-2.3.15.1-all.zip。
2、从struts-2.3.15.1-all\struts-2.3.15.1\lib中拷贝出
(1)javassist-3.11.0.GA.jar
(2)commons-io-2.0.1.jar
(3)commons-lang3-3.1.jar
(4)freemarker-2.3.19.jar
(5)ognl-3.0.6.jar
(6)commons-fileupload-1.3.jar
(7)xwork-core-2.3.15.1.jar
(8)struts2-core-2.3.15.1.jar
(9)struts2-spring-plugin-2.3.15.1.jar
注:保留原有的commons-lang-2.6.jar,其余的替换旧版本。(删除对应旧版本,然后将上述9个Jar包拷贝进去)
3、重新编译。完毕
struts2漏洞S2-016、S2-017修补方案:
方案1:
方案介绍:
手工修改Ognl.jar源码,增加恶意代码过滤。此方法只能修补S2-016漏洞,但是对以后可能产生的ognl漏洞有预防作用。
操作步骤:
1.1 找到项目中ognl-version.jar,然后找到其对应的源码。把源码解压后,导入到eclipse。找到Ongl.java中修改如下代码:
1.2 将上面修改后的项目通过eclipse导出为ognl-my.jar, 将它放到lib目录。
1.3 删除原来ognl-version.jar
1.4 重启服务器。
方案2:
方案介绍:
重写struts2 DefaultActionMapper的handleSpecialParameters方法,增加action、redirect、redirectAction等参数的过滤。此方法可修补S2-016、S2-017漏洞。
操作步骤:
2.1 新建com/website/struts2/MyDefaultActionMapper.java,代码如下:
2.2 复制MyDefaultActionMapper.class 到 /com/website/struts2/目录。
2.3 用struts.xml添加如下代码:
2.4 重启服务器。
注意:
1.方案1中的“恶意代码”和方案2中的“action、redirect、redirectAction”均为hardcode,如有需要可改为从配置文件读取。
2.方案1原则上对系统没有影响,方案2进行了redirect和redirectAction可跳转性测试,但未进行全站测试。
3.方案1和方案2可以同时执行,也可只执行单独一个。