产品: Spring Security
受影响的软件包: spring-security-crypto
受影响的版本: =5.7.16、=5.8.18、=6.0.16、=6.1.14、=6.2.10、=6.3.8、=6.4.4
GitHub 仓库: https://spring.io/projects/spring-security
已发布的软件包 : https://central.sonatype.com/artifact/org.springframework.security/spring-security-crypto
软件包管理器: Maven
已修复: NES for Spring Security v5.7.18 和 v5.8.21
Spring Security 是一个全面的 Java 安全框架,用于保护企业级应用程序的安全。它提供了强大而灵活的编程模型,让您能够轻松管理身份验证、授权和其他安全问题,从而简化安全应用程序的开发。Spring Security 与 Spring 框架无缝集成,提供强大的工具来配置访问控制、管理用户角色和保护资源,同时允许 Java 作为您应用程序开发的主要语言。
Spring Security 的 spring-security-crypto 中发现了一个信息泄露漏洞 ( CVE-2025-22234 ),该漏洞破坏了时序攻击缓解措施。
攻击者可以利用登录响应时间来判断哪些用户名有效。有效的用户名通常会因为密码检查而导致更长的响应时间,而无效的用户名由于不执行密码检查而返回更快。Spring Security 通过始终执行密码检查(无论用户是否存在于系统中)来缓解此问题。
此问题影响 Spring Security 的 spring-security-crypto 包的多个版本。
漏洞信息
Spring 团队最近修补了 CVE-2025-22228 漏洞,该漏洞解决了 spring-security-crypto 中的一个问题。然而,此修复破坏了 DaoAuthenticationProvider 中实现的计时攻击缓解机制。如果密码编码器设置为 BCrypt,并且请求中使用的密码长度超过 72 个字符,则编码器的行为会发生改变——它会抛出异常。此更改可能会被利用来泄露有关服务的信息,例如正在使用的密码编码器或测量用户查找时间。
重现步骤
1.设置易受攻击的 Spring Security 版本
-
配置身份验证以使用 DaoAuthenticationProvider 和 BCryptPasswordEncoder 。
2.验证时间一致性,密码长度为 <72
-
验证无效用户名是否会导致 BadCredentialsException 异常,并将响应时间与有效用户名和错误密码的响应时间进行比较。两种情况的响应时间应该大致相同,从而证明该方法能够有效缓解时序攻击。
3.使用长度为 >72 的长密码进行测试
-
尝试使用超过 72 个字符的密码对有效用户进行身份验证。请注意,在存在漏洞的版本中,由于 BCrypt 处理长密码的方式不同,这会触发不同的异常或行为。
4.更新至 Spring Security 的修补版本
-
将您的 Spring Security 依赖项升级到包含此 CVE 修复的版本。
5.使用长密码重新测试
-
使用长度超过 72 个字符的密码重复测试。请注意,现在的行为与步骤 2 的行为一致,异常处理和响应时间也保持一致,这证明补丁程序已恢复对计时攻击的适当缓解措施。
原文始发于微信公众号(Ots安全):Spring Security CVE-2025-22234 引入用户名枚举向量
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论