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)
1 |
|
问题点:
- 权限规则
/admin/**
通过AntPathMatcher
匹配请求 URI,但未对请求路径进行标准化处理。 - 当请求路径为
/./admin
或/admin//
时,AntPathMatcher
将其视为与/admin/**
不同的路径,导致user
过滤器未触发,直接放行请求。
关键代码 2:用户控制器(UserController.java)
1 |
|
- 即使控制器明确定义了
/admin
接口,Shiro 的权限校验逻辑仍可能因路径未标准化而绕过。
关键代码 3:路径匹配逻辑(Shiro 内部实现推测)
1 |
|
- 若请求路径为
/./admin
,AntPathMatcher
不会将其标准化为/admin
,直接匹配失败,绕过权限校验。
漏洞复现步骤
1.启动vulhub里的靶场
2.访问8080端口,请求/admin
,返回302
3.构造恶意请求/./admin
,会返回登陆成功
修复方案
- 升级 Shiro 版本:升级至 **Shiro 1.1.0+**,该版本默认对请求路径进行标准化处理。
- 强制路径规范化:在
ShiroFilterFactoryBean
前添加自定义过滤器,强制标准化请求 URI:1
2
3
4
5
6
7
8
9public 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 未对请求路径进行标准化处理,导致权限校验逻辑被绕过。修复需结合框架升级与路径规范化机制,确保权限规则与标准化后的路径严格匹配。开发者应始终对用户输入的路径进行规范化处理,避免类似漏洞。
CVE-2010-3863源码分析与漏洞复现
https://spinage.top/2025/06/28/CVE-2010-3863源码分析与漏洞复现/