概述
Spring Boot 提供了一个随时可用的 Spring 平台预配置,使用户能够快速开发 Java 应用程序。 通过利用Spring Framework,Spring Boot 可简化网络应用程序的开发,同时提供各种工具来管理应用程序配置、数据访问和安全性。
在 Spring Boot 中发现了签名伪造漏洞路径遍历漏洞(CVE-2024-38807)。利用此漏洞,黑客可使看似由一个用户签名的内容实际上由另一个用户签名。 这会影响使用 spring-boot-loader 或 spring-boot-loader-classic 并使用自定义代码对嵌套的 jar 进行签名验证的应用程序。
This issue affects Spring Boot versions >=2.7.0 through <=2.7.21, >=3.0.0 through <=3.0.16, >=3.1.0 through <=3.1.12, >=3.2.0 through <=3.2.8, and >=3.3.0 through<=3.3.2.
详细信息
模块信息
- 产品Spring Boot
- 受影响的软件包和版本: 一些文字
- spring-boot-loader – versions >=2.7.0 through <=2.7.21
- spring-boot-loader-classic – versions: >=3.0.0 through <=3.0.16, >=3.1.0 through <=3.1.12, >=3.2.0 through <=3.2.8, and >=3.3.0 through<=3.3.2
- GitHub 存储库: https://github.com/spring-projects/spring-boot
- 软件包管理器Maven
漏洞信息
在上述突出显示版本中的 Spring Boot 的 spring-boot-loader和 spring-boot-loader-classic 软件包中发现了此中严重性漏洞。
利用自定义代码验证嵌套在其他 Jar 中的签名 Jar 的 Spring Boot 驱动的应用程序中存在此漏洞,这些应用程序可能会错误地归属于较早加载的 Jar 的签名。
造成该漏洞的原因是嵌套的 Jar 和证书在运行时的加载和处理方式存在漏洞。其结果是,在执行动态代码前依赖加密签名的应用程序可以将未签名、不匹配或无效的 Jar 验证为已签名。
复制步骤
可以通过以下步骤重现无效签名丢失或无效签名的加载:
- 创建或选择一个罐子,并使用 jarsign工具进行签名。
- 在 Jar(即invalid . jar)中添加一个单独编译的类文件(即Foo .class)。
- 验证 jar 是否无效:jarsigner -verify invalid.jar
- 将无效 jar 嵌套到另一个 jar(即parent.jar)中
- 配置应用程序以确保加载parent.jar 和invalid. jar 。
- 请注意,加载这两个罐子时没有任何警告。
请注意,执行自定义签名验证的应用程序也可能受到影响。重现此漏洞的步骤在很大程度上取决于应用程序,因此我们的团队将根据情况更新重现问题的步骤。如果您觉得您的项目可能会受到这种影响,请联系 HeroDevs团队,讨论您的具体项目情况。
缓解
- Spring Boot 3.2 和 3.3 用户应更新到解决此问题的最新社区支持源版本(分别至少为 3.29 和 3.3.3)。
- 包括 2.7 在内的其他 Spring Boot 版本不再受社区支持。社区支持版本不会收到任何解决此问题的更新。有关详细信息,请参阅此处。
- 2.6.x 及以下版本的 Spring Boot 用户不受此漏洞的直接影响,因为签名验证是在 2.7.0 中引入的,但在这些版本中,带有无效签名的 Jars 仍有可能无错加载。因此,我们建议将所有项目更新到受支持的 Spring Boot 版本。
- 确保所有 jar 都经过适当签名并有效,以限制风险并防止运行时出错。
对于需要时间进行迁移的用户来说,他们可以利用HeroDevs这样的商业支持合作伙伴来提供 EOL 后的安全支持。
学分
参考资料
每当我们支持的开源软件修复了新的漏洞,我们就会发出警报。