spring-boot-starter-parent 2.7.3 中升级到 SnakeYaml 1.31

Sye*_*ena 22 java snakeyaml fortify spring-boot snyk

有一个 springboot 项目,其中想要排除 Snakeyaml 1.30 或将其升级到 1.31,以避免强化问题报告

Snakeyaml 1.30 版本存在安全漏洞

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
</parent>
Run Code Online (Sandbox Code Playgroud)

下面是在项目的有效pom.xml上看到的

  <dependency>
          <groupId>org.yaml</groupId>
          <artifactId>snakeyaml</artifactId>
          <version>1.30</version>
          <scope>compile</scope>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

是否有可能按照补救措施所说的将版本升级到 Snakeyaml 1.31 进行升级?

参考: https: //security.snyk.io/vuln/SNYK-JAVA-ORGYAML-2806360

小智 38

SnakeYAML 是Spring Boot 中的托管依赖项,因此您只需将以下内容添加到让 Spring Boot 2.3.7 使用 SnakeYAML 1.31 而不是 1.30 的properties部分:pom.xml

<snakeyaml.version>1.31</snakeyaml.version>
Run Code Online (Sandbox Code Playgroud)


Mar*_*kus 13

<dependencyManagement>您始终可以通过以下块中的块更改版本号pom.xml

<dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.31</version>
      </dependency>

   </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

这将自动更改您的项目将使用的版本。您可以通过mvn dependency:tree稍后运行来测试这一点。它应该只显示 Snakeyaml 版本 1.31。

重要提示:请确保在集成下一版本的 Spring Boot 后立即删除此块,因为它很可能包含增加的版本。否则您可能会在以后的更新后无意中降级版本。

另请注意,某些 lib 版本和 Spring Boot 之间可能不兼容,因此可能并不总是可以通过这种方式更新版本。


DeJ*_*aVo 10

如果您使用的是gradle,您可以覆盖 spring boot 使用的版本。

使用该io.spring.dependency-management插件,它会自动spring-boot-dependencies从您正在使用的 Spring Boot 版本导入 bom。

plugins {
   id 'org.springframework.boot' version '2.7.3'
}
Run Code Online (Sandbox Code Playgroud)

完成后,您可以通过设置相应的属性来自定义 spring 使用的版本:

ext {
   set('snakeyaml.version','1.32')
}
Run Code Online (Sandbox Code Playgroud)

要查看依赖项版本及其要覆盖的属性的完整列表,您可以在此处浏览:

https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html#appendix.dependency-versions.properties

现在,运行时./gradlew dependencies可以看到org.yaml.snakeyaml已经升级到v1.32:

    +--- org.springframework.boot:spring-boot-starter-actuator -> 2.7.3
|    +--- org.springframework.boot:spring-boot-starter:2.7.3
|    |    +--- org.springframework.boot:spring-boot:2.7.3
|    |    |    +--- org.springframework:spring-core:5.3.22
|    |    |    |    \--- org.springframework:spring-jcl:5.3.22
|    |    |    \--- org.springframework:spring-context:5.3.22
|    |    |         +--- org.springframework:spring-aop:5.3.22
|    |    |         |    +--- org.springframework:spring-beans:5.3.22
|    |    |         |    |    \--- org.springframework:spring-core:5.3.22 (*)
|    |    |         |    \--- org.springframework:spring-core:5.3.22 (*)
|    |    |         +--- org.springframework:spring-beans:5.3.22 (*)
|    |    |         +--- org.springframework:spring-core:5.3.22 (*)
|    |    |         \--- org.springframework:spring-expression:5.3.22
|    |    |              \--- org.springframework:spring-core:5.3.22 (*)
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:2.7.3
|    |    |    \--- org.springframework.boot:spring-boot:2.7.3 (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:2.7.3
|    |    |    +--- ch.qos.logback:logback-classic:1.2.11
|    |    |    |    +--- ch.qos.logback:logback-core:1.2.11
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.32 -> 1.7.36
|    |    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.17.2
|    |    |    |    +--- org.slf4j:slf4j-api:1.7.35 -> 1.7.36
|    |    |    |    \--- org.apache.logging.log4j:log4j-api:2.17.2
|    |    |    \--- org.slf4j:jul-to-slf4j:1.7.36
|    |    |         \--- org.slf4j:slf4j-api:1.7.36
|    |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    |    +--- org.springframework:spring-core:5.3.22 (*)
|    |    \--- org.yaml:snakeyaml:1.30 -> 1.32
Run Code Online (Sandbox Code Playgroud)

这个答案基于 v2.7.3 的 spring 文档,可以在这里找到: https ://docs.spring.io/spring-boot/docs/2.7.3/gradle-plugin/reference/htmlsingle/