如何从项目的 Maven 依赖树中删除旧的易受攻击的 Apache 公共集合版本依赖项?
How can I remove the old vulnerable Apache commons collection version dependency from my project's maven dependency tree?
我的 Java 应用程序项目由 Maven 管理。
我的项目有一些库依赖项再次依赖于 Apache commons collection 3.2.1
,这是易受攻击的 - 例如Apache 公共配置、速度等
(我可以看到它正在被 运行 mvn dependency:tree
命令使用。)
我既没有直接使用Apache commons collection编写任何代码,也没有定义它的依赖关系,但它正在被使用。
我该怎么做才能消除它的依赖并强制使用安全版本 - 3.2.2、4.1。
供您参考:
JIRA Bug - Arbitrary remote code execution with InvokerTransformer
这是我的部分pom.xml,我想没什么了不起的。
...
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
...
除非我遗漏了一些明显的东西,否则只需在您的 POM 中指定依赖项就足够了:
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
<dependency>
...
</dependencies>
如果您将其指定为 <dependencies>
部分的 top,它将覆盖 commons-collections
的任何其他传递包含。
当然,您可能会遇到其他依赖项依赖于其他版本的不兼容性,但这就是单元测试的目的,对吧? ;-)
您需要做的是从受影响的依赖项中排除 commons-collections
并直接在您的依赖项中包含所需的版本。
示例 pom.xml
摘录假设 commons-configuration
使用易受攻击的 commons-collections
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
<exclusions>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
<scope>runtime</scope>
</dependency>
为简单起见,我没有在 dependency-management
部分的根 pom.xml
中显示配置。
<scope>
应设置为 runtime
,因为您提到不直接使用该库。
我已经在我的 pom.xml
中添加了这些行,但仍在下载 commons-collections3.2
..
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${apachecommonslang.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${dbcp.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
</exclusions>
</dependency>
我的 Java 应用程序项目由 Maven 管理。
我的项目有一些库依赖项再次依赖于 Apache commons collection 3.2.1
,这是易受攻击的 - 例如Apache 公共配置、速度等
(我可以看到它正在被 运行 mvn dependency:tree
命令使用。)
我既没有直接使用Apache commons collection编写任何代码,也没有定义它的依赖关系,但它正在被使用。
我该怎么做才能消除它的依赖并强制使用安全版本 - 3.2.2、4.1。
供您参考: JIRA Bug - Arbitrary remote code execution with InvokerTransformer
这是我的部分pom.xml,我想没什么了不起的。
...
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
...
除非我遗漏了一些明显的东西,否则只需在您的 POM 中指定依赖项就足够了:
<dependencies>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
<dependency>
...
</dependencies>
如果您将其指定为 <dependencies>
部分的 top,它将覆盖 commons-collections
的任何其他传递包含。
当然,您可能会遇到其他依赖项依赖于其他版本的不兼容性,但这就是单元测试的目的,对吧? ;-)
您需要做的是从受影响的依赖项中排除 commons-collections
并直接在您的依赖项中包含所需的版本。
示例 pom.xml
摘录假设 commons-configuration
使用易受攻击的 commons-collections
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
<exclusions>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
<scope>runtime</scope>
</dependency>
为简单起见,我没有在 dependency-management
部分的根 pom.xml
中显示配置。
<scope>
应设置为 runtime
,因为您提到不直接使用该库。
我已经在我的 pom.xml
中添加了这些行,但仍在下载 commons-collections3.2
..
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${apachecommonslang.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${dbcp.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
</exclusions>
</dependency>