Docker构建检测到CVE-2024-26308漏洞,无直接依赖却存在该问题
问题分析与解决方案
可能的原因
- 基础镜像自带漏洞依赖:你使用的Docker基础镜像(比如OpenJDK、Maven官方镜像等)本身预装了包含CVE-2024-26308漏洞的Apache Commons Compress版本,这个依赖不属于你的项目代码,所以本地Maven命令查不到。
- 构建工具插件隐式依赖:Maven的部分插件(如
maven-assembly-plugin、maven-shade-plugin等)可能会隐式依赖旧版本的Commons Compress,这类依赖不会出现在项目的业务依赖树中,只会在构建阶段被调用。 - Docker构建缓存残留:之前构建留下的镜像层可能包含旧版本依赖,即使项目配置更新,缓存的镜像层仍会导致漏洞检测告警。
修复步骤
1. 排查并升级基础镜像
查看Dockerfile中使用的基础镜像标签,确认该镜像是否预装了旧版本的Commons Compress。如果是,直接切换到包含修复版本的最新稳定版镜像(比如更新openjdk镜像的标签至最新LTS版本)。
2. 强制锁定依赖版本
在项目pom.xml的dependencyManagement节点中强制指定Commons Compress的版本为1.26.0及以上,覆盖所有间接依赖的版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.26.0</version> </dependency> </dependencies> </dependencyManagement>
3. 修复Maven插件的隐式依赖
如果是构建插件依赖旧版本,在pluginManagement中给对应插件指定修复后的Commons Compress版本。以maven-assembly-plugin为例:
<pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.26.0</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement>
4. 清理Docker缓存
执行以下命令清除旧镜像和缓存,确保构建使用最新依赖:
docker system prune -a docker build --no-cache .
5. 验证修复
构建完成后,用Docker Desktop内置的漏洞扫描功能重新检测,确认CVE-2024-26308告警已消除。
内容的提问来源于stack exchange,提问作者Akash Jain
相关产品推荐
相关产品推荐

