易受攻击的依赖项 maven:org.yaml:snakeyaml

问题描述 投票:0回答:6

我会定期检查我的

pom.xml
上的漏洞,并且通常通过更新依赖项版本来修复这些问题。但是,我收到以下错误:

提供传递漏洞依赖项 maven:org.yaml:snakeyaml:1.30 CVE-2022-25857 7.5 未受控制的资源消耗漏洞待 CVSS 分配 CVE-2022-38752 6.5 发现中等严重性的越界写入漏洞 CVE-2022-38749 6.5 待 CVSS 分配的越界写入漏洞 CVE-2022-38750 5.5 越界写入漏洞待 CVSS 分配 CVE-2022-38751 6.5 越界写入漏洞待 CVSS 分配 CVE-2022-41854 6.5 发现中等严重性的基于堆栈的缓冲区溢出漏洞 CVE-2022-1471 9.8 发现高严重性反序列化不可信数据漏洞
结果由 Checkmarx(c) 提供支持

我尝试将

<version>
添加到我的
<artifactId>spring-boot-starter-web</artifactId>
中的
pom.xml
中,但这没有任何意义。

那么,如何才能正确解决这个问题呢?我使用 IntelliJ 默认功能来解决此类问题,但是我应该做任何额外有用的插件等吗?

java spring-boot maven dependencies pom.xml
6个回答
21
投票

不幸的是,Spring Boot 2.7.x 仍然使用旧的、易受攻击的 SnakeYAML 版本 (1.30)。他们仍然没有将其升级到最新版本(1.33)。 Spring Boot 3.0.0 确实依赖于版本 1.33。

假设您还无法升级到 Spring Boot 3.0.0,唯一可行的方法就是在项目中添加对 SnakeYAML 1.33 的依赖项。该版本应该优先于 Spring Boot 的传递依赖。

但是,SnakeYAML 1.33 仍然存在漏洞。由于这是最后一个版本(SnakeYAML 2.x 与 1.x 不兼容),因此在 SnakeYAML 团队修复之前您无法摆脱它。

编辑:对于 SnakeYAML 2.x,我的意思是这个。 SnakeYAML 1.33 最近有一个后续的 2.0 版本,这是一个不同的版本。 1.33 和 2.0 之间的兼容性仍然不是 100%,但 Spring Boot 2.7.10+ 和 Spring Boot 3.x 应该都支持。


10
投票

Rob Spoor已经解释了原因,可以通过排除依赖项来消除此警告:

<exclusions>
    <exclusion>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
    </exclusion>
</exclusions>

将上述代码添加到相应的标签中。


6
投票

我在 Springboot 3.0.6 中也有同样的警告。它工作正常,但在 pom.xml 中看到一段巨大的黄色代码让我很恼火。 我通过向代码中添加排除项解决了这个问题,如上所述。

带有警告的代码:

<dependency>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
  <groupId>org.springframework.boot</groupId>
</dependency>

这是可行的解决方案:

<dependency>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
  <groupId>org.springframework.boot</groupId>
  <exclusions>
    <exclusion>
      <artifactId>snakeyaml</artifactId>
      <groupId>org.yaml</groupId>
    </exclusion>
  </exclusions>
</dependency>

5
投票

SnakeYAML 2.2版本兼容SpringBoot 3.1.3。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>2.2</version>
    </dependency>

复制并粘贴您的 pom.xml 并重新运行您的应用程序。


3
投票

您需要将 SnakeYAML 版本更新到 2.0。 为此,请在 pom.xml 中添加以下代码并重新运行您的应用程序。

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

0
投票

当你有一个 Maven 设置时,其中 spring-boot 是你的父级,你还可以设置

snakeyaml.version
属性来覆盖它的版本:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>example.com</groupId>
    <artifactId>foo</artifactId>
    <version>1.13-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.4</version>
        <relativePath />
    </parent>

    <properties>
        <snakeyaml.version>2.2</snakeyaml.version>
    </properties>
...
© www.soinside.com 2019 - 2024. All rights reserved.