Spring Framework 最新漏洞分析与修复指南
近期,Spring Framework 曝出了两个严重的安全漏洞:CVE-2024-38808 和 CVE-2024-38809。这两个漏洞都可能导致拒绝服务(DoS)攻击,严重影响系统的稳定性和安全性。本文将详细介绍这两个漏洞的影响范围、修复方法,以及在 Spring Boot 2.x 项目中如何进行版本升级。
一、CVE-2024-38808 漏洞分析
1.1 漏洞描述
在 Spring Framework 版本 5.3.0 至 5.3.38 及更早的不受支持版本中,如果应用程序评估了用户提供的 SpEL(Spring Expression Language)表达式,攻击者可以利用特制的表达式导致拒绝服务(DoS)攻击。
1.2 受影响的产品和版本
-
Spring Framework: 5.3.0 至 5.3.38 及更早的版本 -
Spring Boot: 2.7.x 至 2.7.18 及更早的版本
1.3 缓解措施
建议受影响版本的用户升级到以下修复版本:
受影响的版本 | 修复版本 |
---|---|
5.3.x | 5.3.39 |
对于 5.3.x 用户,建议升级到 5.3.39+ 或直接迁移至 6.0+。在无法完全避免用户提供 SpEL 表达式的情况下,应使用 SimpleEvaluationContext.forReadOnlyDataBinding
进行只读模式下的表达式评估。
二、CVE-2024-38809 漏洞分析
2.1 漏洞描述
当应用程序解析 HTTP 请求头中的 “If-Match” 或 “If-None-Match” ETag 时,可能会遭受 DoS 攻击。
2.2 受影响的产品和版本
-
Spring Framework: -
6.1.0 至 6.1.11 -
6.0.0 至 6.0.22 -
5.3.0 至 5.3.37 及更早版本
-
-
Spring Boot: -
3.1.0 至 3.1.12 -
3.0.0 至 3.0.13 -
2.7.x 至 2.7.18 及更早版本
-
2.3 缓解措施
建议受影响版本的用户升级到以下修复版本:
受影响的版本 | 修复版本 |
---|---|
6.1.x | 6.1.12 |
6.0.x | 6.0.23 |
5.3.x | 5.3.38 |
如果无法立即升级,用户可以通过配置 Filter
限制 “If-Match” 和 “If-None-Match” 头的大小,以减少攻击面。
三、如何在 Spring Boot 2.x 项目中修复漏洞
Spring Boot 2.7.x、3.0.x、3.1.x 等版本已经停止更新,用户需要手动调整 Spring Framework 版本,以下是具体操作步骤:
3.1 添加 spring-framework-bom
依赖
在 pom.xml
中添加如下依赖管理配置:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.3.39</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 其他依赖 -->
</dependencies>
</dependencyManagement>
注意: 为确保 Maven 能正确解析依赖,请将
spring-framework-bom
放在依赖管理部分的最前面。
3.2 确认依赖版本
刷新 Maven 依赖,确保拉取到的 Spring Framework 版本为最新的 5.3.39+。
依赖版本确认
3.3 检查 Spring EL 的使用
对于涉及到 SpEL 表达式的地方,如自定义注解限流、权限校验、缓存等功能,需要确认是否读取了用户提供的请求参数。如果有此类情况,建议使用 SimpleEvaluationContext.forReadOnlyDataBinding
构建只读上下文,避免潜在风险。
结论
随着 Spring Framework 的广泛应用,及时更新和修复漏洞对保证系统安全至关重要。本文提供的修复指南将帮助开发者有效规避 CVE-2024-38808 和 CVE-2024-38809 的风险。如果你正在使用老版本的 Spring Boot,请尽快参考本文进行修复与升级。
来源:https://mp.weixin.qq.com/s/WdeIVpWDF94Xn3bw1epFBQ
没有回复内容