问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CVE-2025-22235:Spring Boot EndpointRequest.to() 错误导致认证绕过漏洞分析复现
漏洞分析
Spring Boot是一个开放源代码Java框架,用于开发独立、产品等级的Spring应用程序,和节省开发人员工作量。 该漏洞涉及 Spring Boot 中 `EndpointRequest.to()` 方法在配置安全规则时可能生成错误的匹配器,导致未暴露的执行器端点路径(如 `/null/**`)的安全保护失效。
漏洞描述 **Spring Boot**是一个开放源代码Java 框架,用于开发独立、产品等级的Spring应用程序,和节省开发人员工作量。 该漏洞涉及 Spring Boot 中 `EndpointRequest.to()` 方法在配置安全规则时可能生成错误的匹配器,导致未暴露的执行器端点路径(如 `/null/**`)的安全保护失效。 影响版本: - Spring Security: - 仅限 5.7.16 - 仅限 5.8.18 - 仅限 6.0.16 - 仅限 6.1.14 - 仅限 6.2.10 - 仅限 6.3.8 - 仅限 6.4.4 - 较旧的、不受支持的版本也受到影响 环境搭建 ---- #### 1. **创建 Spring Boot 项目** 通过 [Spring Initializr](https://start.spring.io/) 生成项目,选择以下依赖: - **Spring Web** - **Spring Security** - **Spring Boot Actuator** #### 2. 在 `pom.xml` 中指定 Spring Boot 漏洞版本: #### 3. 在 `application.properties` 中限制执行器端点的暴露范围(例如不暴露 `health` 端点): # 仅暴露 info 端点,health 端点未暴露 management.endpoints.web.exposure.include\\=info #### 4. 在安全配置类中使用 `EndpointRequest.to()` 方法,并引用未暴露的端点(如 `health`): ··· .authorizeHttpRequests(auth -> auth // 漏洞触发点:引用了未暴露的 health 端点 .requestMatchers(EndpointRequest.to("health")).permitAll() // 配置需要保护的 /null 路径 .requestMatchers("/null").authenticated() ··· ) #### 5. 添加控制器处理 `/null` 路径 @RestController public class DemoController { @GetMapping("/null") public String sensitiveEndpoint() { return "未登录看到此页面,说明存在漏洞!"; } } 漏洞分析 ---- 这是一个认证错误漏洞。首先去授权过滤器看一下,下断点:`org.springframework.security.web.access.intercept.AuthorizationFilter#doFilter` 可以看到`health`接口的匹配路径是`/null/**`,根据`securityFilterChain`中的配置,包含`health`接口的请求不需要授权验证。 也就是说请求路径`/null/**`的请求都不需要验证。也就会导致后续的`securityFilterChain`链中跟`/null/**`有关的安全过滤器会失效。  继续跟进,看看为什么会生成`pattern='/null/**'`的匹配器。下边看看这个委托器怎么创建的,下断点: `org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest.EndpointRequestMatcher#createDelegate` 再次访问`http://localhost:8080/null`触发断点。这里先创建安全代理链第一个的`health`的委托器  根据源(`health`)从入口匹配对应的接口路径,从调试可以看出来,里边没有匹配的。  没有匹配到默认返回`null`  跟进到`org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest.AbstractRequestMatcher#getDelegateMatchers`,用来生成对应的路径。  拼接后去获取匹配器`/null/**`  最终创建的委托器如下,之后直接传递给入口请求匹配器`[health]`。  漏洞复现 ---- 访问需要认证的`/null`路径,直接可以访问。  漏洞修复 ---- 新版本中,对`path`参数进行不为`null`验证  受影响版本的用户请升级到相应的修复版本。 | 受影响的版本 | 修复版本 | 可用性 | |---|---|---| | 2.7.x | 2.7.25 | [仅限企业支持](https://spring.vmware.com/) | | 3.1.x | 3.1.16 | [仅限企业支持](https://spring.vmware.com/) | | 3.2.x | 3.2.14 | [仅限企业支持](https://spring.vmware.com/) | | 3.3.x | 3.3.11 | 开源软件 | | 3.4.x | 3.4.5 | 开源软件 | 如果您无法升级,那么您可以: - 确保`EndpointRequest.to()`所指的端点已启用并通过 Web 公开 - 确保你不会处理以下请求`/null`
发表于 2025-04-30 09:01:47
阅读 ( 277 )
分类:
开发框架
0 推荐
收藏
0 条评论
请先
登录
后评论
la0gke
9 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!