Resin Web服务器文件解析漏洞
author:Arno 2011-2-15
摘要:Resin web server 在web.xml文件中servlet映射中支持正则表达式,比如标签” servlet-regexp”。但是在通用路径映射标签” servlet-mapping”的处理上也是将其属性”url-pattern”的值转化为正则表达式来进行servlet的映射,并且在转换时没有做安全校验处理,所以在web服务器处理*.ext之类的请求会调用特定的sevlet来解析,从而产生解析漏洞。
发布日期:2010-2-15
更新日期:2010-2-15
—————————————-纯洁的分割线——————————————————————-
<很早很早以前的文章了,因为给Resin发邮件,他忽略了该漏洞;另外要开始专注写博客了,所以拿出来凑凑数 。哈哈哈>
受影响版本:
Resin web服务器所有版本
描述:
Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
Resin 在处理servlet mapping时支持使用正则表达式来进行处理,将url-pattern转化为正则表达式的时候没有进行安全校验,并且在进行正则表示匹配的时候使用的匹配方式是匹配输入串中与模式匹配的子串,结合上面点,攻击者能够构造特殊的url来使得web服务器调用特定的类来进行解析。
比如:
/x.jspx/x.x 文件会被当做jspx文件来进行解析
/x.jsp/x.x 文件将被当做jsp文件来解析
/x.xtp/x.x 文件将被当做xtp文件来进行解析
and so on 类似于IIS6.0的解析漏洞,需要通过创建一个文件夹来触发漏洞。
测试方法:
警 告:
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
http://www.target.com/test.jsp/qafkk.gif
qafkk.gif 文件将会被当做jsp文件来解析,效果图如下:
ShowMeTheCode:
主要的类在com.caucho.server.dispatch.FilterMapping中,以下是内部类Match这个漏洞触发的主要代码:
static class Match {
static final int INCLUDE = 1;
static final int EXCLUDE = -1;
static final int NO_MATCH = 0;
private final Pattern _regexp;
private final int _value;
private Match(Pattern regexp, int value)
{
_regexp = regexp;
_value = value;
}
/**
* Creates an include pattern.
*/
static Match createInclude(Pattern regexp)
{
return new Match(regexp, INCLUDE);
}
/**
* Creates an exclude pattern.
*/
static Match createExclude(Pattern regexp)
{
return new Match(regexp, EXCLUDE);
}
/**
* Returns the match value.
*/
int match(String uri)
{
if (_regexp.matcher(uri).find())
return _value;
else
return NO_MATCH;
}
}
修补方案:
1、 临时建议:
修改resin 配置文件app-default.xml 中servlet-mapping的属性url-pattern的值.ext为/.ext
Resin web服务器存在文件解析漏洞,由于在处理`servlet-mapping`时未对`url-pattern`进行安全校验,允许攻击者通过构造特殊URL使服务器将非预期文件作为特定类型处理,例如将.gif文件解析为.jsp。影响所有版本的Resin。解决方案包括修改配置文件以限制文件扩展名。

3056

被折叠的 条评论
为什么被折叠?



