-
-
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`.
还有各路微博……
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`.
还有各路微博……
赞赏
赞赏
雪币:
留言: