设为首页 - 加入收藏 - 网站地图 SecYe安全 Www.SecYe.Com - 国内网络信息安全IT技术门户网
当前位置:首页 > 新闻资讯 > 综合资讯 > 正文

Struts2 S2-022漏洞简要分析

时间:2014-05-12 16:42 来源:未知 作者:www.secye.com 阅读:

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采用类似如下特定的配置:

 

 

*

*

 

 

 

 

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

本文来源:SecYe安全网[http://www.secye.com] (责任编辑:SecYe安全)

点击复制链接 与好友分享!

顶一下
(0)
0%
踩一下
(0)
0%