Spring 和 Nacos 双双爆出安全漏洞!!

2024-08-17 16:27:48 浏览数 (2)

这两天看到 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 技术干货

0 人点赞