Two Tricks Of CAS-CLIENT AUTH Bypass
字数 1619 2025-08-05 08:17:20
CAS-CLIENT 认证绕过技巧分析文档
概述
本文档详细分析CAS-CLIENT认证机制中存在的两种绕过技巧,包括技术原理、利用方法和修复方案。CAS (Central Authentication Service) 是一种单点登录协议,而CAS-CLIENT是其客户端实现,用于限制匿名用户对特定API的访问。
技巧一:ignorePattern配置不当导致的绕过
场景描述
系统配置要求:
/api/admin需要CAS登录才能访问/api/guest是公共页面,允许匿名访问
开发人员在web.xml中的配置:
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://battags.ad.ess.rutgers.edu:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://www.acme-client.com</param-value>
</init-param>
<init-param>
<param-name>ignorePattern</param-name>
<param-value>/api/guest</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
绕过原理
-
URL处理问题:
org.jasig.cas.client.authentication.AuthenticationFilter在匹配时获取的是原生URL(未处理../路径遍历),包括查询参数部分。 -
匹配模式问题:filter的匹配模式有四种,默认是正则匹配,但开发人员可能不了解这一点。
利用方法
由于配置不当,攻击者可以通过以下方式绕过认证:
- 路径遍历:
/api/guest/../admin - URL编码:
/api/guest%2f..%2fadmin - 查询参数:
/api/admin?guest=1
修复方案
正确的配置应使用严格的正则匹配:
<init-param>
<param-name>ignorePattern</param-name>
<param-value>^/api/guest$</param-value>
</init-param>
注意事项:
- 避免使用
CONTAINS等宽松匹配选项 - 确保路径规范化处理
技巧二:useSuffixPatternMatch导致的绕过
场景描述
系统要求:
/admin系列路由不允许匿名访问
Spring Boot配置:
@Configuration
@EnableCasClient
public class CasConfig extends CasClientConfigurerAdapter {
public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
super.configureAuthenticationFilter(authenticationFilter);
authenticationFilter.addUrlPatterns(new String[]{"/admin/*"});
}
}
绕过原理
在Spring Boot 1.x中:
useSuffixPatternMatch默认为true- Spring会对路由进行正则匹配
/admin.*能匹配/admin.,从而绕过认证
利用方法
攻击者可以通过以下方式绕过:
- 添加后缀:访问
/admin.而不是/admin - 其他后缀变体:
/admin.html,/admin.jsp等
修复方案
- 关闭useSuffixPatternMatch:
@Configuration
@ComponentScan
@EnableWebMvc
public class AppConfig {
@Bean
public HandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping();
mapping.setUseSuffixPatternMatch(false);
return mapping;
}
}
- 升级方案:
- 升级到Spring Boot 2.x(默认关闭useSuffixPatternMatch)
总结与最佳实践
漏洞分类
| 技巧 | 漏洞类型 | 影响版本 | 风险等级 |
|---|---|---|---|
| ignorePattern配置不当 | 认证绕过 | 所有版本 | 中高 |
| useSuffixPatternMatch | 认证绕过 | Spring Boot 1.x | 中 |
防御措施
-
严格路径匹配:
- 使用
^...$形式严格匹配路径 - 避免使用
CONTAINS等宽松匹配选项
- 使用
-
路径规范化:
- 在处理URL前进行规范化处理
- 过滤
../等路径遍历字符
-
框架配置:
- 关闭
useSuffixPatternMatch - 考虑升级到Spring Boot 2.x+
- 关闭
-
安全测试:
- 对认证边界进行模糊测试
- 测试各种路径遍历和URL编码变体
相关CWE参考
- CWE-178: Improper Handling of Case Sensitivity
- CWE-20: Improper Input Validation
- CWE-73: External Control of File Name or Path
附录
测试用例
ignorePattern测试:
/api/guest/../admin/api/guest%2f..%2fadmin/api/admin?guest=1
useSuffixPatternMatch测试:
/admin./admin.html/admin.jsp