En

Struts2 S2-022漏洞简要分析

作者:rices公布时间:2014-05-07阅读次数:8322评论:0

分享


2014-05-03,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:




从漏洞简要描述来看,确定是对之前S2-021的补充。

其实在S2-021漏洞的修补过程可以看出官方已经意识到了cookie拦截器也存在和参数拦截器类似的问题,并且无法使用struts-default.xml配置文件进行正则拦截。主要原因在于如果应用配置某个action使用通配符‘*’接受cookieName,cookie拦截器默认会对所有传入的cookieName进行参数绑定,造成操控class进而影响到classLoader。

从S2-022可以看出,官方只理解到了cookie拦截器操控classLoader问题,虽然在xwork中特定引入一个ExcludedPatterns类:

public class ExcludedPatterns {

    public static final String CLASS_ACCESS_PATTERN = "(.*\\.|^|.*|\\[('|\"))class(\\.|('|\")]|\\[).*";

    public static final String[] EXCLUDED_PATTERNS = {
            CLASS_ACCESS_PATTERN,
            "^dojo\\..*",
            "^struts\\..*",
            "^session\\..*",
            "^request\\..*",
            "^application\\..*",
            "^servlet(Request|Response)\\..*",
            "^parameters\\..*"
    };

EXCLUDED_PATTERNS正则匹配只用在了参数拦截器中,cookie拦截器中却只使用了CLASS_ACCESS_PATTERN进行匹配防御:(struts2.3.16.2 CookieInterceptor类部分代码)

   
 // Allowed names of cookies
    private Pattern acceptedPattern = Pattern.compile(ACCEPTED_PATTERN, Pattern.CASE_INSENSITIVE);
    private Pattern excludedPattern = Pattern.compile(ExcludedPatterns.CLASS_ACCESS_PATTERN, Pattern.CASE_INSENSITIVE);

excludedPattern只取了CLASS_ACCESS_PATTERN部分。

很明显,classLoader操控漏洞解决了,但是session,request,application等各类web应用变量任意操控问题依然存在,因而有了后续S2-022的出现。

此外,漏洞成功利用的前提是需要应用针对action采用类似如下特定的配置:

<action name="hello" class="test.helloAction"> 
<interceptor-ref name="defaultStack" />
   <interceptor-ref name="cookie">
        <param name="cookiesName">*</param>
        <param name="cookiesValue">*</param>
   </interceptor-ref>


但不保证业务一定不会采用,腾讯安全中心建议广大厂商迅速升级至struts2.3.16.3版本

评论留言

提交评论 您输入的漏洞名称有误,请重新输入