最新Struts漏洞修复方案
来源:互联网 发布:itunes更新软件 编辑:程序博客网 时间:2024/04/29 03:14
2014年3月2日,Apache Struts发表了S2-020报告,同时发布Struts 2.3.16.1版本 ,用于修复class参数引起的安全漏洞(CVE-2014-0094)。
这次安全漏洞影响范围很大,波及了Struts全版本,即Struts 1.x 和Struts 2.x。产生此安全漏洞的原因是,Apache Struts的默认上传机制是基于Commons FileUpload 1.3版本,其附加的ParametersInterceptor允许访问'class' 参数(该参数直接映射到getClass()方法),并允许控制ClassLoader。在具体的Web容器部署环境下(如:Tomcat),攻击者利用 Web容器下的Java Class对象及其属性参数(如:日志存储参数),可向服务器发起远程代码执行攻击,进而植入网站后门控制网站服务器主机。
2014年04月22日,有安全机构发现修复版本Struts2.3.16.1并没有把此安全漏洞解决,对上传参数的过滤并不完全。于是官方两天后就发布了Struts 2.3.16.2版本。
但是,由于class调用方式众多,目前并没有最终解决此安全漏洞。
目前为止,可行的修复方案有两个。
1. 添加需要过滤文字列(适用于Struts 2.x版本)
修改struts2源码,struts-default.xml文件<interceptor-refname="params">标签里面的<paramname="excludeParams">,
文字列^dojo\..*
全部替换为
(.*\.|^|.*|\[(
'|"))(c|C)lass(\.|(
'|")]|\[).*
,^dojo\..*
2.JAVA中添加过滤器,拒绝特定参数的请求(适用于Struts 1.x和Struts 2.x版本)
web.xml中添加<filter>标签,Filter类中使用正则(^|\\W)[cC]lass\\W与请求的参数一一匹配,符合条件的话,抛出系统异常,终止服务。
配置Filter规则:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <filter> <filter-name>ClassPollutionFilter</filter-name> <filter-class>cn.harveylee.struts.ClassPollutionFilter</filter-class> </filter> <filter-mapping> <filter-name>ClassPollutionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
添加Filter代码:
package cn.leee.struts;import java.io.IOException;import java.util.Enumeration;import java.util.regex.Pattern;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;public class ClassPollutionFilter implements Filter { private static Pattern EXCLUDE_PARAMS = Pattern.compile("(^|\\W)[cC]lass\\W"); public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; Enumeration<?> params = req.getParameterNames(); while (params.hasMoreElements()) { String paramName = (String) params.nextElement(); if (isClassPollution(paramName)) { throw new IllegalArgumentException("Exclude param: " + paramName); } } Cookie cookies[] = req.getCookies(); if (cookies != null) { for (Cookie c : cookies) { String cookieName = c.getName(); if (isClassPollution(cookieName)) { throw new IllegalArgumentException("Exclude param: " + cookieName); } } } chain.doFilter(request, response); } private static boolean isClassPollution(String target) { return EXCLUDE_PARAMS.matcher(target).find(); } @Override public void init(FilterConfig config) throws ServletException { }}
附参考文档网址
S2-020报告:http://struts.apache.org/release/2.3.x/docs/s2-020.html
S2-021报告:http://struts.apache.org/release/2.3.x/docs/s2-021.html
Struts 2.3.16.2下载地址:http://struts.apache.org/download.cgi#struts23162
日本安全事件反应协会报告:http://www.nca.gr.jp/2014/struts_s20/index.html- 最新Struts漏洞修复方案
- Oracle 漏洞修复方案
- Struts2漏洞修复方案
- Struts最新漏洞
- dedecms5.7最新漏洞修复
- struts s2-045漏洞修复
- Struts2 高危漏洞修复方案
- Struts2 高危漏洞修复方案
- Struts2 高危漏洞修复方案
- Linux Bash严重漏洞最终修复方案
- Java反序列化漏洞修复方案
- 服务器SSL不安全漏洞修复方案
- WebView 远程代码执行漏洞修复方案
- 文件上传漏洞和修复方案
- 命令执行漏洞和修复方案
- Struts2 s2-033漏洞修复方案
- 水平权限漏洞的修复方案
- 水平权限漏洞的修复方案
- JavaWeb多线程简单Web服务器实现
- Ubuntu 安装 VMware Tools 报“无法找到kernel header path”的解决方案
- j2ee的线程安全--threadlocal
- A Memory-Efficient Doubly Linked List
- hdu 1595 find the longest of the shortest(dijstra + 枚举)
- 最新Struts漏洞修复方案
- C++ Interview question
- gen kernel cscope.files 2.6.22.6
- Reverse Linked List II
- busy box 1.7.0 cscope.files
- C\C++的转义字符
- 互联网本质论(欢迎来论)
- vfork详细讲解和实例
- R-水浒人物关系呈现