排查Maven缓存中带漏洞jackson-databind的依赖来源及阻止方案
Maven缓存漏洞依赖排查与阻止下载方案
问题描述
开发机器/构建服务器的Maven缓存中出现带漏洞的jackson-databind版本,被安全扫描标记。已定位涉事项目,但原因不明:
- 执行
mvn dependency:tree无法找到目标jackson-databind版本 - 执行
mvn dependency:resolve-plugins仅显示插件直接依赖,未发现jackson-databind踪迹
求可查看应用、插件全量传递依赖的命令,怀疑是构建环节引入该依赖,但无法确认。
更新信息
添加-Dverbose参数执行依赖树命令后,发现是com.auth0:java-jwt:3.3.0引入了jackson-databind 2.9.2版本——该版本虽因依赖冲突被2.14.3替代,但仍被下载至Maven缓存。求阻止Maven下载被排除依赖的方法。
问题依赖图
[INFO] +- com.duosecurity:duo-universal-sdk:jar:1.1.3:compile [INFO] | +- com.squareup.retrofit2:retrofit:jar:2.9.0:compile [INFO] | | \- com.squareup.okhttp3:okhttp:jar:3.14.9:compile [INFO] | | \- com.squareup.okio:okio:jar:1.17.2:compile [INFO] | +- com.squareup.retrofit2:converter-jackson:jar:2.9.0:compile [INFO] | | +- (com.squareup.retrofit2:retrofit:jar:2.9.0:compile - omitted for duplicate) [INFO] | | \- (com.fasterxml.jackson.core:jackson-databind:jar:2.10.1:compile - omitted for conflict with 2.14.3) [INFO] | +- (com.fasterxml.jackson.core:jackson-core:jar:2.12.4:compile - omitted for conflict with 2.14.3) [INFO] | +- com.auth0:java-jwt:jar:3.3.0:compile [INFO] | | +- (com.fasterxml.jackson.core:jackson-databind:jar:2.9.2:compile - omitted for conflict with 2.14.3) [INFO] | | \- (commons-codec:commons-codec:jar:1.11:compile - omitted for conflict with 1.9) [INFO] | \- com.squareup.okhttp3:logging-interceptor:jar:4.9.1:compile [INFO] | +- (com.squareup.okhttp3:okhttp:jar:4.9.1:compile - omitted for conflict with 3.14.9) [INFO] | \- org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:1.4.10:compile [INFO] | +- org.jetbrains.kotlin:kotlin-stdlib:jar:1.4.10:compile [INFO] | | +- org.jetbrains.kotlin:kotlin-stdlib-common:jar:1.4.10:compile [INFO] | | \- org.jetbrains:annotations:jar:13.0:compile [INFO] | \- org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10:compile [INFO] | \- (org.jetbrains.kotlin:kotlin-stdlib:jar:1.4.10:compile - omitted for duplicate)
解决方案
1. 查看全量依赖(含插件传递依赖)的命令
执行以下命令,可同时打印应用和插件的所有传递依赖,精准定位jackson-databind的所有引入路径:
mvn dependency:tree -Dverbose -Dincludes=com.fasterxml.jackson.core:jackson-databind -Dplugin.dependencies=true
2. 阻止被排除依赖的下载
Maven默认会下载冲突中被替代的依赖,可通过以下两种方式彻底阻止:
方法一:显式排除依赖
在com.auth0:java-jwt:3.3.0的依赖声明中,显式排除其jackson-databind依赖,Maven将不再下载该版本:
<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.3.0</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> </dependency>
方法二:用Maven Enforcer插件强制版本
配置Enforcer插件,指定jackson-databind的唯一允许版本,既阻止旧版本下载,又在构建时报错拦截违规依赖:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>enforce-jackson-version</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedDependencies> <excludes> <exclude>com.fasterxml.jackson.core:jackson-databind:[,2.14.3)</exclude> </excludes> <message>禁止使用jackson-databind 2.14.3以下的漏洞版本</message> </bannedDependencies> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build>
内容的提问来源于stack exchange,提问作者Paul Zepernick
相关产品推荐
相关产品推荐

