当前位置:编程学习 > JAVA >>

关于struts2.0.0-struts2.3.15安全漏洞问题求教大神

最近apache官方网站上公布了一个struts2的一个安全漏洞,情况如下:

影响版本:struts2.0.0-struts2.3.15

漏洞类型:远程命令执行

威胁等级:高危

漏洞描述:受影响版本对于参数action的值redirect和redirectAction没有正确过滤,导致恶意用户构造的参数会被当做OGNL代码执行;

       由于公司负责的系统WEB端用到了struts2,现要求我负责对系统进行struts2版本升级,但系统以前是用
struts2.0.11.1版本,现在直接替换到struts2.3.15.1的话会影响系统,根本无法运行,会报各种错误。所以,之前struts2.3.4版本漏洞时,我们采用的是直接修改xwork包就可以了。因为上次是由于xwork参数拦截器允许ognl方法执行漏洞造成。所以还想请教各位大神有什么办法不升级,而是修改包的方法来解决这个漏洞。 Struts2 安全漏洞 --------------------编程问答-------------------- 写个过滤器,过滤redirect redirectAction,其实struts2.0升级到2.3也不影响原来的内容,只是换个jar包和修改下配置文件就可以了 --------------------编程问答-------------------- 这个漏洞影响大么 会有致命性影响么 请教一下




--------------------编程问答--------------------
   struts2.0.11.1版本-struts2.3.15.1,版本过渡太大了,系统使用的ssh,几个框架之间会有很多关联,直接升级struts2,其他框架还是老版本怕会让系统存在潜在的危险,所以一直采用的是出现struts2漏洞就修改jar包。不知道本次struts2出现漏洞后apache修改的是哪个jar包呢?只要把相应的关于这个漏洞的方法修改下就可以了吧。求各位能指教下。。

    --------------------编程问答-------------------- 这些框架都是向后兼容的,所以单纯升级struts2jar是没有问题的,至于说整合起来会不会有问题,要看别的框架说明了。 --------------------编程问答-------------------- 就是因为还使用其他框架,所以公司保证系统稳定的运行不会允许升级struts2的jar包的。 --------------------编程问答-------------------- 人家升级不可能升级的都是配置文件,你替换下就行了,那么多.class怎么替换,替换那些,至于说拦截redirect redirectAction,就别想了,你知道人家的机制是什么吗?像京东,苏宁这样的公司肯定是升级版本了,不可能去改jar,稳定型你就不敢保证。 --------------------编程问答--------------------  没有,我上面说了。去年的时候struts2.3.4版本发布漏洞时,我们采用的是直接修改xwork包就可以了。因为上次是由于xwork参数拦截器允许ognl方法执行漏洞造成。
通过分析xwork2.0源码,与xwork2.3.4源码比较,最新版本中加入了对参数的内容效验的机制,通过对参数进行正则表达示的排除来判断是否合法化。
对com.opensymphony.xwork2.interceptor.ParametersInterceptor 进行重写加入如下代码
 
    private String acceptedParamNames = "\\w+((\\.\\w+)|(\\[\\d+\\])|(\\(\\d+\\))|(\\['\\w+'\\])|(\\('\\w+'\\)))*";
    private Pattern acceptedPattern = Pattern.compile(acceptedParamNames);
    protected boolean acceptableName(String name) {
        if (isAccepted(name) && !isExcluded(name)) {
            return true;
        }
        return false;
    }    
    protected boolean isAccepted(String paramName) {
        if (!this.acceptParams.isEmpty()) {
            for (Pattern pattern : acceptParams) {
                Matcher matcher = pattern.matcher(paramName);
                if (matcher.matches()) {
                    return true;
                }
            }
            return false;
        } else
            return acceptedPattern.matcher(paramName).matches();
    }
 
  这是上次漏洞的解决方法。就是不知道这次apache新增了哪个方法对这个漏洞进行防止的。 --------------------编程问答-------------------- 那只能说你们的框架也太死了,假设以后人家升级到struts20.0,你们不会还去改源码吧? --------------------编程问答-------------------- 现在最大的问题是struts2版本跨度太大,我们当时开发的时候用的是struts2.0.11.1,现在都已经struts2.3.15了,我各种尝试替换和增加新的jar包,但是一直都报错。求大神们出个解决方案吧。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,