1

我的 Java 应用程序项目由 Maven 管理。

我的项目有一些库依赖项,这又取决于Apache commons collection 3.2.1哪些是易受攻击的——例如 Apache 公共配置、速度等。

(我可以看到它正在通过运行mvn dependency:tree命令使用。)

我没有直接使用 Apache commons 集合编写任何代码行,也没有定义它的依赖关系,但它正在被使用。

我能做些什么来消除它的依赖并强制使用安全版本 - 3.2.2、4.1。

供您参考: JIRA Bug - 使用 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>
...
4

3 回答 3

3

除非我遗漏了一些明显的东西,否则仅仅在你的 POM 中指定依赖就足够了:

<dependencies>
  <dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
  <dependency>
  ...
</dependencies>

如果您将其指定为部分的顶部<dependencies>,它将覆盖commons-collections.

当然,您可能会遇到其他依赖项依赖于其他版本的不兼容问题,但这就是单元测试的目的,对吧?;-)

于 2016-01-08T07:27:40.807 回答
0

我已经在我的 中添加了这些行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> 
于 2016-02-17T02:48:16.427 回答
0

您需要做的是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>

为简单起见,我没有pom.xml在该dependency-management部分的根目录中显示配置它。

<scope>应该设置为,因为runtime您提到不直接使用该库。

于 2016-01-08T07:30:04.640 回答