• 沙里软件

  • ShaliSoft.com [手机站]   办公桌收纳抽屉
  • 首页
  • 博文
  • 演示
  • 管理
  • Struts2再曝S2-020补丁绕过漏洞 正则表达式过滤不严

    网络   2014/4/27 7:12:55

    4月24日,网络曝出文章“安全研究人员指出Apache Struts2在漏洞公告S2-020里,在处理修复CVE-2014-0094的漏洞修补方案存在漏洞,导致补丁被完全绕过。”

    受影响产品: 

    Struts 2.0.0 – Struts 2.3.16.1 
    成因与威胁: 

    Apache Struts 2.0.0-2.3.16版本的默认上传机制是基于Commons FileUpload 1.3版本,其附加的ParametersInterceptor允许访问'class' 参数(该参数直接映射到getClass()方法),并允许控制ClassLoader。在具体的Web容器部署环境下(如:Tomcat),攻击者利用 Web容器下的Java Class对象及其属性参数(如:日志存储参数),可向服务器发起远程代码执行攻击,进而植入网站后门控制网站服务器主机。

    让我们一起来回顾一下Struts缝缝补补的历史(万恶的正则表达式):

    2007年1月:

    <param name="excludeParams">dojo\..*</param>

    2008年6月:

    <param name="excludeParams">dojo\..*,^struts\..*</param>

    2012年3月:

    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>

    2013年10月:

    <param name="excludeParams">^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param>

    2014年3月(S2-020):

    <param name="excludeParams">^class\..*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param>

    漏洞详情:Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行。

    修复方式:将 '^class\.*'添加到excludeParams列表内

    2014年4月……

    从目前公布的信息来看,这个漏洞的局限性很高,利用范围仍然有限。

    目前官方在GitHub上对该问题做出了修正(临时)。

    代码修复详情:

    https://github.com/apache/struts/commit/aaf5a3010e3c11ae14e3d3c966a53ebab67146be#diff-710b29900cea21e85893cae43dd08c92

    core/src/main/resources/struts-default.xml
    
    - <param name="excludeParams">^class\..*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param> + <param name="excludeParams">(.*\.|^)class\..*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param>

    请注意多处都要修改。

    在4月24日下午,又有同学贴出了终极修改方案:

    修改struts源码

    com.opensymphony.xwork2.interceptor.ParametersInterceptor

    将此处代码:

        public void setExcludeParams(String commaDelim) {
            Collection<String> excludePatterns = ArrayUtils.asCollection(commaDelim);
            if (excludePatterns != null) {
                excludeParams = new HashSet<Pattern>();
                for (String pattern : excludePatterns) {
                    excludeParams.add(Pattern.compile(pattern));
                }
            }
        }

    修改为:

        public void setExcludeParams(String commaDelim) {
            Collection<String> excludePatterns = ArrayUtils.asCollection(commaDelim);
            if (excludePatterns != null) {
                excludeParams = new HashSet<Pattern>();
                for (String pattern : excludePatterns) {
                    excludeParams.add(Pattern.compile(pattern));
                }
            }
            //s021 zhenzheteng
            Pattern s021_1 = Pattern.compile("(.*\\.|^)class\\..*",Pattern.CASE_INSENSITIVE);
            Pattern s021_2 = Pattern.compile(".*'class&'.*",Pattern.CASE_INSENSITIVE);
            Pattern s021_3 = Pattern.compile("(.*\\.|^)class\\[.*",Pattern.CASE_INSENSITIVE);
            excludeParams.add(s021_1);
            excludeParams.add(s021_2);
            excludeParams.add(s021_3);
        }

    Struts历史漏洞回顾:

    S2-020: http://struts.apache.org/release/2.3.x/docs/s2-020.html

    S2-019的远程代码执行漏洞: http://sebug.net/vuldb/ssvid-61048

    S2-016官方补丁分析:http://www.freebuf.com/articles/web/11234.html

    S2-013的漏洞分析:http://www.freebuf.com/vuls/9757.html

    Struts2最近几个漏洞分析&稳定利用Payload: http://www.freebuf.com/articles/web/25337.html

    希望Struts官方能在爆出漏洞的第一时间完美的堵上…..

    另外关于S2-020:http://sec.baidu.com/index.php?research/detail/id/18



    阅读(789) 分享(0)

    上一篇: 新浪被吊销牌照后的影响
    下一篇: 盗版影视站长暴利时代终结 流量已大幅贬值

  • 精彩推荐

    ◆ ASP.NET 导入excel
    ◆ PHP5.4 + IIS + Win7的配置
    ◆ MySQL5.5安装图解教程
    ◆ 使用new Image()打点时的一个注意事项
    ◆ OutputCache各参数的说明
    ◆ asp.net 格式化显示时间为几个月,几天前,几小时前,几分钟前,或几秒前
    ◆ MySQL性能分析及explain的使用
    ◆ 为什么iPhone只允许升级,不允许降级
    ◆ 微软澄清:盗版用户无法免费升级Win 10
    ◆ 谷歌致歉:已删除地图上机器人向苹果Logo嘘嘘照片
  • 用心做事 不能唯利是图

    • 吊儿
    • 用QQ联系我17905772
  • 搜索


  • 最新文章

    • 导出Excel 格式 mso-number-format
    • 服务器iis支持tls1.2,windows server 2008 r2 中IIS启用TLS 1.2(安装SSL后用TLS 1.2)
    • MySQL配置优化
    • EditPlus 添加文件比较工具winmerge
    • 滚动悬浮固定JS特效

  • 热门文章

    • php sso单点登录实现代码
    • 中国菜刀(China chopper) 最新黑客工具
    • redis.conf中文版(基于2.4)
    • 搜索引擎名单大全
    • php图片上传类,支持加水印,生成略缩图

  • 最新图库


  • 最新评论


  • 友情链接

  • 沙里软件

  • 最近访客

    Powered by ShaliSoft.com 豫ICP备13008529号

    免责声明:本站部分内容来源于互联网,转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责,也不构成任何其他建议。如果发现侵犯版权,联系QQ17905772进行删除。