如何修复Spring Boot项目pom.xml中的安全漏洞警告?
Spring Boot项目依赖安全漏洞解决指南
问题背景
创建Spring Boot项目并修改依赖、执行Maven重载后,出现一系列安全漏洞警告,提示直接依赖或传递依赖存在CVE安全漏洞,需明确漏洞含义及修复方案。
当前pom.xml配置
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.hank</groupId> <artifactId>springboot-mall</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-mall</name> <description>springboot-mall</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.22</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
漏洞警告详情(翻译后)
- 第20行依赖传递引入存在漏洞的
ch.qos.logback:logback-classic:1.2.3:CVE-2021-42550,CVSS评分6.6,不受信任数据反序列化漏洞 - 第20行依赖传递引入存在漏洞的
ch.qos.logback:logback-core:1.2.3:CVE-2021-42550,CVSS评分6.6,不受信任数据反序列化漏洞 - 第20行依赖传递引入存在漏洞的
org.springframework:spring-beans:5.2.12.RELEASE:- CVE-2022-22965,CVSS评分9.8,代码注入漏洞
- CVE-2022-22970,CVSS评分5.3,资源无限制分配漏洞
- 第20行依赖传递引入存在漏洞的
org.springframework:spring-context:5.2.12.RELEASE:CVE-2022-22968,CVSS评分5.3,大小写处理不当漏洞 - 第20行依赖传递引入存在漏洞的
org.springframework:spring-core:5.2.12.RELEASE:- CVE-2021-22060,CVSS评分4.3,日志输出未正确中立化漏洞
- CVE-2021-22096,CVSS评分4.3,日志输出未正确中立化漏洞
- 第24行依赖传递引入存在漏洞的
com.fasterxml.jackson.core:jackson-databind:2.11.3:- Cxced0c06c-935c,CVSS评分5.9,资源无限制消耗漏洞
- CVE-2020-36518,CVSS评分7.5,越界写入漏洞
- 第24行依赖传递引入存在漏洞的
org.apache.tomcat.embed:tomcat-embed-core:9.0.41:- CVE-2021-25329,CVSS评分7.0,不受信任数据反序列化漏洞
- CVE-2021-25122,CVSS评分7.5,敏感信息未授权泄露漏洞
- CVE-2021-33037,CVSS评分5.3,HTTP请求走私漏洞
- CVE-2021-41079,CVSS评分7.5,输入验证不当漏洞
- CVE-2021-30639,CVSS评分7.5,异常条件处理不当漏洞
- CVE-2021-30640,CVSS评分6.5,输出编码/转义不当漏洞
- CVE-2022-23181,CVSS评分7.0,TOCTOU竞争条件漏洞
- 第24行依赖传递引入存在漏洞的
org.glassfish:jakarta.el:3.0.3:CVE-2021-28170,CVSS评分5.3,表达式语言注入漏洞 - 第24行依赖传递引入存在漏洞的
org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41:CVE-2021-42340,CVSS评分7.5,资源未及时释放漏洞 - 第24行依赖传递引入存在漏洞的
org.springframework:spring-web:5.2.12.RELEASE:- CVE-2016-1000027,CVSS评分9.8,不受信任数据反序列化漏洞
- CVE-2021-22118,CVSS评分7.8,权限管理不当漏洞
- 第24行依赖传递引入存在漏洞的
org.springframework:spring-webmvc:5.2.12.RELEASE:CVE-2016-1000027,CVSS评分9.8,不受信任数据反序列化漏洞 - 第24行依赖传递引入存在漏洞的
org.springframework:spring-expression:5.2.12.RELEASE:CVE-2022-22950,CVSS评分6.5,资源无限制分配漏洞 - 第29行直接依赖
com.h2database:h2:1.4.200存在漏洞:- CVE-2018-14335,CVSS评分6.5,文件访问链接解析不当漏洞
- CVE-2021-42392,CVSS评分9.8,不受信任数据反序列化漏洞
- CVE-2021-23463,CVSS评分9.1,XML外部实体引用限制不当漏洞
- CVE-2022-23221,CVSS评分9.8,代码注入漏洞
- 第34行直接依赖
mysql:mysql-connector-java:8.0.22存在漏洞:- CVE-2021-2471,CVSS评分5.9,XML外部实体引用限制不当漏洞
- CVE-2022-21363,CVSS评分6.6,输入验证不当漏洞
- 第40行依赖传递引入存在漏洞的
net.minidev:json-smart:2.3:- CVE-2021-27568,CVSS评分9.1,异常条件检查不当漏洞
- CVE-2021-31684,CVSS评分7.5,越界写入漏洞
修复方案
1. 升级Spring Boot父版本
当前使用的2.3.7.RELEASE是旧版本,该分支的最新稳定补丁版为2.3.12.RELEASE,升级后Spring Boot会自动管理所有传递依赖的安全版本,修复大部分框架类漏洞:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
2. 升级直接依赖版本
- H2数据库:将
1.4.200升级至最新稳定版(如2.2.224),该版本修复了所有已知高危漏洞:
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> <version>2.2.224</version> </dependency>
- MySQL驱动:将
8.0.22升级至8.0.33或更高稳定版,修复XML外部实体等漏洞:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.33</version> </dependency>
3. 验证依赖更新
执行Maven命令查看依赖树,确认所有依赖版本已更新:
mvn dependency:tree
检查输出中是否还有存在漏洞的版本号,若有则手动在dependencyManagement中指定安全版本。
4. 重新加载Maven项目
在IDE中执行Maven重载操作,或运行以下命令完成依赖更新:
mvn clean install -U
之后重新检查漏洞警告是否全部消除。
内容的提问来源于stack exchange,提问作者劉明翰
相关产品推荐
相关产品推荐

