首页
社区
课程
招聘
Struts2再曝S2-020补丁绕过漏洞–万恶的正则表达式
发表于: 2014-4-25 16:45 890

Struts2再曝S2-020补丁绕过漏洞–万恶的正则表达式

2014-4-25 16:45
890
新闻链接:9f8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3&6W2N6s2y4W2j5%4g2J5K9i4c8&6i4K6u0W2y4e0q4U0N6r3!0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8Q4x3V1j5J5x3o6p5@1x3o6c8Q4x3V1j5@1x3K6j5^5x3K6S2Q4x3X3g2Z5N6r3@1`.

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

Struts2再曝S2-020补丁绕过漏洞–万恶的正则表达式

受影响产品:

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月……

Struts2再曝S2-020补丁绕过漏洞–万恶的正则表达式

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

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

代码修复详情:

44eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7r3q4U0K9r3g2Q4x3V1k6K6N6s2u0#2N6s2y4Q4x3V1k6U0L8$3#2E0K9i4c8Q4x3V1k6S2j5h3j5#2j5e0x3H3x3e0m8W2x3$3x3I4x3h3q4W2x3e0c8W2x3$3b7K6j5K6V1$3y4X3p5#2x3$3g2T1j5h3t1$3y4K6p5@1y4X3u0W2i4K6t1K6k6r3W2X3k6W2)9J5k6o6M7I4x3r3t1J5z5e0V1H3x3r3y4W2j5e0t1I4k6e0R3#2z5o6V1K6j5$3q4W2y4o6y4V1k6o6l9^5j5K6V1J5
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: f9fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1M7Y4g2@1M7#2)9J5k6h3q4H3j5h3y4Z5k6g2)9J5k6h3!0J5k6#2)9J5c8Y4u0W2L8r3g2S2M7$3g2Q4x3V1j5J5i4K6u0W2x3#2)9J5k6i4S2Q4x3V1k6V1L8$3y4K6i4K6u0r3M7K6u0Q4x3X3b7H3x3U0m8Q4x3X3g2Z5N6r3#2D9

S2-019的远程代码执行漏洞: 28cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5Y4g2Y4i4K6u0W2L8X3g2@1i4K6u0r3N6Y4g2D9k6r3u0Q4x3V1k6K6M7%4k6A6k6q4)9J5k6o6j5I4x3o6b7^5

S2-016官方补丁分析:99dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6J5k6h3g2T1N6h3k6Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2M7#2)9J5c8Y4N6W2j5W2)9J5c8U0p5I4x3U0x3@1i4K6u0W2K9s2c8E0L8l9`.`.

S2-013的漏洞分析:f15K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6J5k6h3g2T1N6h3k6Q4x3X3g2U0L8$3#2Q4x3V1k6$3N6h3I4K6i4K6u0r3z5e0M7#2y4#2)9J5k6h3S2@1L8h3H3`.

Struts2最近几个漏洞分析&稳定利用Payload: fdeK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6J5k6h3g2T1N6h3k6Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2M7#2)9J5c8Y4N6W2j5W2)9J5c8U0t1#2x3K6x3%4i4K6u0W2K9s2c8E0L8l9`.`.

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

另外关于S2-020:aacK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5#2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2H3K9s2m8Q4x3@1k6J5k6i4y4W2j5i4u0U0K9q4)9J5c8X3c8W2N6r3q4A6L8q4)9J5c8X3W2V1i4K6u0r3x3e0R3`.

参考:

apache:f9cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1M7Y4g2@1M7#2)9J5k6h3q4H3j5h3y4Z5k6g2)9J5k6h3!0J5k6#2)9J5c8Y4u0W2L8r3g2S2M7$3g2Q4x3V1j5J5i4K6u0W2x3#2)9J5k6i4S2Q4x3V1k6V1L8$3y4K6i4K6u0r3M7K6u0Q4x3X3b7H3x3U0m8Q4x3X3g2Z5N6r3#2D9

cnvd:6afK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4F1N6X3c8Q4x3X3g2G2M7X3N6Q4x3X3g2U0L8W2)9J5c8Y4N6W2j5X3W2F1k6X3!0Q4x3V1k6K6K9r3!0%4i4K6u0r3x3K6b7J5y4H3`.`.

piyolog:b45K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8Q4x3X3g2Z5j5i4c8W2L8X3q4Q4x3X3g2F1k6g2)9J5k6h3A6H3i4K6u0r3d9$3q4F1k6$3!0Q4x3V1j5J5x3o6p5@1x3o6b7I4y4#2)9J5c8U0p5K6z5e0M7%4y4e0l9I4z5b7`.`.

scutum:1beK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4y4U0N6i4c8#2L8g2)9J5k6h3A6H3i4K6u0r3K9h3&6X3L8%4u0E0j5i4c8A6L8$3&6Q4x3V1k6%4j5h3k6Q4y4h3k6@1k6h3y4Z5i4K6g2X3j5X3I4G2k6#2)9J5c8U0t1H3x3e0c8Q4x3V1j5H3y4q4)9J5c8Y4N6S2k6W2)9J5k6r3u0D9L8$3N6Q4x3X3b7H3x3K6k6Q4x3X3g2Z5N6r3#2D9

ipa.jp:9beK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3W2H3j5g2)9J5k6h3N6G2i4K6u0W2K9Y4m8Q4x3V1k6K6k6h3y4#2M7X3W2@1P5g2)9J5c8X3y4A6j5h3c8J5i4K6u0r3N6Y4g2D9i4K6u0r3x3U0l9I4y4o6l9@1x3e0N6Q4x3X3c8K6N6s2u0#2N6s2y4Q4x3X3g2Z5N6r3#2D9

空虚浪子心的博客:745K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3W2F1j5Y4u0W2j5h3E0Q4x3X3g2F1k6i4c8Q4x3V1j5`.

还有各路微博……

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回