You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Spring Boot 3中Sonar检测到的Guava CVE-2020-8908漏洞问题?

Spring Boot 3中Guava间接依赖的CVE-2020-8908漏洞处理指南

一、Guava的用途

Guava是Google开发的一套Java工具库,提供了大量开箱即用的工具类,覆盖集合操作、缓存实现、并发控制、IO处理、字符串工具、反射工具等多个领域。它的核心作用是简化Java开发中的重复代码,提升代码效率和可读性,很多主流Java框架(包括Spring生态的部分组件)都会将其作为依赖引入,所以你的应用即使没显式声明,也可能被间接带入。

二、CVE-2020-8908漏洞原因

这个漏洞源于Guava的Files.createTempDir()方法:

  • 该方法创建临时目录时,默认使用系统级临时目录(如Linux的/tmp、Windows的%TEMP%)
  • 创建的目录权限设置为开放模式(比如Linux下的777),意味着系统内其他用户或进程可以随意访问、修改甚至删除该目录下的文件
  • 攻击者可通过篡改临时文件,实现本地权限提升或注入恶意代码,CVSS评分6.2正是对应这种本地未授权访问的风险

三、为什么未显式引入仍会被检测到?

Spring Boot 3的部分依赖(比如Spring Cloud组件、第三方业务SDK等)可能将Guava作为自身依赖,通过Maven/Gradle的依赖传递机制,自动将Guava 31.1-android引入到你的应用中。你可以通过以下命令定位依赖来源:

  • Maven:mvn dependency:tree | grep guava
  • Gradle:./gradlew dependencies | grep guava

四、漏洞修复方案

1. 升级Guava到安全版本

该漏洞已在Guava 30.0及以上版本修复,你可以通过显式声明依赖的方式,强制将Guava升级到最新安全版本:

  • Maven(pom.xml):
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>32.1.3-android</version>
        <scope>compile</scope>
    </dependency>
    
  • Gradle(build.gradle):
    implementation('com.google.guava:guava') {
        version {
            strictly '32.1.3-android'
        }
    }
    

2. 排除不必要的Guava依赖

如果确认你的应用及依赖组件不需要Guava功能,可以在引入问题依赖时排除Guava:

  • Maven:
    <dependency>
        <groupId>【问题依赖的groupId】</groupId>
        <artifactId>【问题依赖的artifactId】</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • Gradle:
    implementation('【问题依赖的groupId】:【问题依赖的artifactId】') {
        exclude group: 'com.google.guava', module: 'guava'
    }
    

注意:排除前务必进行完整测试,确保组件不会因缺少Guava而抛出NoClassDefFoundError等异常

3. 替换漏洞方法(若代码中直接使用)

如果你的业务代码或依赖组件代码中调用了Files.createTempDir(),可替换为JDK原生的安全方法Files.createTempDirectory(),手动指定严格的目录权限:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.PosixFilePermissions;

// 创建仅当前用户可访问的临时目录
Path tempDir = Files.createTempDirectory(
    "app-temp-", 
    PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------"))
);

内容的提问来源于stack exchange,提问作者franklin xavier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:02:36