这两天看到 Spring 和 Nacos 官方双双发布了安全漏洞,Spring 爆出的是 DoS 拒绝服务漏洞,Nacos 爆出的是会造成任意文件读写漏洞,下面我会具体说明问题并提供解决办法。
Spring 发布的安全漏洞
Spring 发布的安全漏洞包括两个:
1、CVE-2024-38809
Spring 框架在处理 HTTP 请求时,当从 “If-Match” 或 “If-None-Match” 条件请求请求头解析 ETag 请求头时,很容易会受到 DoS 的攻击。
If-Match 和 If-None-Match 是 HTTP 协议中的条件请求头,用于在发送请求时对资源的状态进行控制,以避免数据不必要的更新,这两个请求头一般与 ETag 一起使用。
影响的 Spring 版本:
- 6.1.0 - 6.1.11;
- 6.0.0 - 6.0.22;
- 5.3.0 - 5.3.37;
- 其他老版本都受影响
解决办法就是升级到最新安全版本:
如果不想升级版本,也可以加一个 Filter 过滤器,通过过滤器来限制每个 HTTP 请求解析 “If-Match” 或 “If-None-Match” 条件请求请求头的大小。
2、CVE-2024-38808
用户可以通过特制的 Spring 表达式语言(SpEL)表达式,造成 DoS 拒绝服务漏洞。
影响的 Spring 版本:
- 5.3.0 - 5.3.38;
- 其他老版本都受影响
所以,修复上面那个 DoS 漏洞的 5.3.38 版本也已经不安全了,这个漏洞的解决办法就是升级到最新安全版本:Spring 5.3.9 或者 6.0 。
另外,尽量避免对用户提供的 SpEL 表达式进行求值运算,如果一定要求值,就需要在只读模式下使用 SimpleEvaluationContext
类进行处理。
所以,最终解决以上两个漏洞的 Spring 安全版本是:
现在都是 Spring Boot 框架了,建议检查 Spring 依赖并升级到安全的 Spring Boot 版本,基于 3.1.x 以下的版本都停止维护了,最好的办法是升级到 3.2.x 及以上的版本:
但是,R哥检查了下最新的 3.3.2 和 3.2.8 版本,它们还是上个月发布的,并未发布适配这两天发布的 Spring 6.1.12 安全版本,所以需要等待下一个版本。
有必要的自行替换 Spring Boot 中的 Spring 依赖吧,但需要注意兼容性问题。
Spring Boot 基础就不介绍了,推荐看这个实战项目:
https://github.com/javastacks/spring-boot-best-practice
Nacos 发布的安全漏洞
上一篇:Nacos 2.4.0 正式发布,带来重磅更新!
Nacos 2.4.0 才发布不久,Nacos 2.4.1 又来了,这个版本主要是为了修复一个安全漏洞,另外也还增强了几个功能以及修复一些 bug。
这个漏洞主要是由于 Jraft 请求造成的,受影响的仅为 7848 端口,它一般是 Nacos 集群间使用 Raft 协议通信的端口,不会用于处理客户端的请求,该端口如果被外部请求,会导致任意文件被读写的安全漏洞。
解决办法:
- 无脑升级 Nacos 到最新版本:2.4.1;
- 老版本可以通过防火墙限制外部请求访问 7848 端口;
此外,最新发布的 2.4.1 版本还优化了 derby ops 接口,默认限制了 derby 数据库可执行的 SQL 范围,降低了用户打开 derby ops 接口时的风险。
技术更新太快,咱们学习的速度永远跟不上更新的速度,但话又说回来,开源不易,既然用开源,就得接受开源的弊端和后果,至少开源技术的漏洞很快能被爆出来并被解决。
如今,Spring 和 Nacos 成为了 Java 技术栈的中坚力量,不管是工作需要,或者是跳槽面试,Spring 和 Nacos 都是必学的,它已成为了 Java 程序员必备的技术之一。
所以,大家有时间还是要多更新一些技能储备,不要沉迷在 CRUD 中,久而久之就会被淘汰了。
最后,如果你想系统学习 Spring Cloud Nacos 如何构建微服务,建议报名R哥最新出品的《Spring Cloud Alibaba 微服务课程》,一次付费,后续都提供免费更新,永久学习。
好了,今天的分享就到这里了,后续也会继续关注并分享更多的 Java 技术干货