CVE-2010-3863源码分析与漏洞复现
漏洞概述
CVE-2010-3863 是 Apache Shiro(原 JSecurity)框架中的路径标准化缺陷漏洞,影响版本为 Shiro 1.1.0 之前。攻击者通过构造包含冗余字符(如 /./、//、../)的 URL 绕过权限校验逻辑,直接访问受保护的资源(如/admin接口)。本报告基于用户提供的源码进行详细分析。
技术细节分析
1. 漏洞成因
- 路径匹配逻辑缺陷:Shiro 的权限校验逻辑依赖
AntPathMatcher进行路径匹配,但未对请求 URI 进行规范化处理。攻击者可通过冗余字符构造非标准路径(如/./admin),绕过权限检查。 - 过滤器链配置问题:
ShiroFilterFactoryBean中定义的路径规则(如/admin/**)未与实际请求的规范化路径匹配,导致校验失效。
2. 源码分析
关键代码 1:Shiro 过滤器链配置(ShiroConfig.java)
@Bean(name = {"shiroFilter"})
ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager);
Map<String, String> map = new LinkedHashMap<>();
map.put("/doLogin", "anon"); // 允许匿名访问登录接口
map.put("/admin/**", "user"); // 要求用户认证访问 /admin 路径
map.put("/**", "anon"); // 其他路径允许匿名访问
bean.setFilterChainDefinitionMap(map);
return bean;
}
问题点:
- 权限规则
/admin/**通过AntPathMatcher匹配请求 URI,但未对请求路径进行标准化处理。 - 当请求路径为
/./admin或/admin//时,AntPathMatcher将其视为与/admin/**不同的路径,导致user过滤器未触发,直接放行请求。
关键代码 2:用户控制器(UserController.java)
@RequestMapping("/admin")
public String helloPage() {
return "admin"; // 受保护的 admin 页面
}
- 即使控制器明确定义了
/admin接口,Shiro 的权限校验逻辑仍可能因路径未标准化而绕过。
关键代码 3:路径匹配逻辑(Shiro 内部实现推测)
// 旧版 Shiro 的 AntPathMatcher 逻辑(简化)
public boolean match(String pattern, String path) {
return path.startsWith(pattern); // 简单前缀匹配
}
- 若请求路径为
/./admin,AntPathMatcher不会将其标准化为/admin,直接匹配失败,绕过权限校验。
漏洞复现步骤
1.启动vulhub里的靶场

2.访问8080端口,请求/admin,返回302

3.构造恶意请求/./admin,会返回登陆成功

修复方案
- 升级 Shiro 版本:升级至 Shiro 1.1.0+,该版本默认对请求路径进行标准化处理。
- 强制路径规范化:在
ShiroFilterFactoryBean前添加自定义过滤器,强制标准化请求 URI:public class NormalizePathFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { String uri = request.getRequestURI(); String normalizedUri = UriUtils.normalizePath(uri); // 标准化路径 request = new NormalizedHttpServletRequestWrapper(request, normalizedUri); chain.doFilter(request, response); } } - 细化权限规则:避免使用宽松的
/**规则,明确保护所有敏感路径。
总结
通过分析源码可知,CVE-2010-3863 的根源在于 Shiro 未对请求路径进行标准化处理,导致权限校验逻辑被绕过。修复需结合框架升级与路径规范化机制,确保权限规则与标准化后的路径严格匹配。开发者应始终对用户输入的路径进行规范化处理,避免类似漏洞。

浙公网安备 33010602011771号