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>

绕过原理

  1. URL处理问题org.jasig.cas.client.authentication.AuthenticationFilter在匹配时获取的是原生URL(未处理../路径遍历),包括查询参数部分。

  2. 匹配模式问题: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

修复方案

  1. 关闭useSuffixPatternMatch
@Configuration
@ComponentScan
@EnableWebMvc
public class AppConfig {
    @Bean
    public HandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping mapping = new RequestMappingHandlerMapping();
        mapping.setUseSuffixPatternMatch(false);
        return mapping;
    }
}
  1. 升级方案
  • 升级到Spring Boot 2.x(默认关闭useSuffixPatternMatch)

总结与最佳实践

漏洞分类

技巧 漏洞类型 影响版本 风险等级
ignorePattern配置不当 认证绕过 所有版本 中高
useSuffixPatternMatch 认证绕过 Spring Boot 1.x

防御措施

  1. 严格路径匹配

    • 使用^...$形式严格匹配路径
    • 避免使用CONTAINS等宽松匹配选项
  2. 路径规范化

    • 在处理URL前进行规范化处理
    • 过滤../等路径遍历字符
  3. 框架配置

    • 关闭useSuffixPatternMatch
    • 考虑升级到Spring Boot 2.x+
  4. 安全测试

    • 对认证边界进行模糊测试
    • 测试各种路径遍历和URL编码变体

相关CWE参考

  • CWE-178: Improper Handling of Case Sensitivity
  • CWE-20: Improper Input Validation
  • CWE-73: External Control of File Name or Path

附录

测试用例

ignorePattern测试

  1. /api/guest/../admin
  2. /api/guest%2f..%2fadmin
  3. /api/admin?guest=1

useSuffixPatternMatch测试

  1. /admin.
  2. /admin.html
  3. /admin.jsp

参考链接

CAS-CLIENT 认证绕过技巧分析文档 概述 本文档详细分析CAS-CLIENT认证机制中存在的两种绕过技巧,包括技术原理、利用方法和修复方案。CAS (Central Authentication Service) 是一种单点登录协议,而CAS-CLIENT是其客户端实现,用于限制匿名用户对特定API的访问。 技巧一:ignorePattern配置不当导致的绕过 场景描述 系统配置要求: /api/admin 需要CAS登录才能访问 /api/guest 是公共页面,允许匿名访问 开发人员在web.xml中的配置: 绕过原理 URL处理问题 : org.jasig.cas.client.authentication.AuthenticationFilter 在匹配时获取的是原生URL(未处理 ../ 路径遍历),包括查询参数部分。 匹配模式问题 :filter的匹配模式有四种,默认是正则匹配,但开发人员可能不了解这一点。 利用方法 由于配置不当,攻击者可以通过以下方式绕过认证: 路径遍历: /api/guest/../admin URL编码: /api/guest%2f..%2fadmin 查询参数: /api/admin?guest=1 修复方案 正确的配置应使用严格的正则匹配: 注意事项 : 避免使用 CONTAINS 等宽松匹配选项 确保路径规范化处理 技巧二:useSuffixPatternMatch导致的绕过 场景描述 系统要求: /admin 系列路由不允许匿名访问 Spring Boot配置: 绕过原理 在Spring Boot 1.x中: useSuffixPatternMatch 默认为true Spring会对路由进行正则匹配 /admin.* 能匹配 /admin. ,从而绕过认证 利用方法 攻击者可以通过以下方式绕过: 添加后缀:访问 /admin. 而不是 /admin 其他后缀变体: /admin.html , /admin.jsp 等 修复方案 关闭useSuffixPatternMatch : 升级方案 : 升级到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 参考链接 CAS官方文档 Spring URL匹配文档 OWASP路径遍历防护