如何从项目的maven依赖树中删除旧的易受攻击的Apache commons集合版本依赖项?

时间:2016-01-08 07:10:04

标签: java maven apache-commons-collection

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

我的项目有一些库依赖关系依赖于Apache commons collection 3.2.1,这是易受攻击的 - 例如Apache公共配置,速度等

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

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

我可以做些什么来消除其依赖性并强制使用安全版本 - 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>
...

3 个答案:

答案 0 :(得分:3)

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

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

如果您指定<dependencies>部分的顶部,它将覆盖commons-collections的任何其他传递包含。

当然,你可能会遇到不兼容的问题,而其他依赖关系取决于其他版本,但那是什么单元测试,对吧? ; - )

答案 1 :(得分:0)

您需要做的是从受影响的依赖项中排除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应设置为(function() { var buttonValue = {}; $("#submit").click(function() { $("input[type=button], input[type=file]").each(function($i) { var name = $(this).attr('name') buttonValue[name] = $(this).val(); }); console.log(JSON.stringify(buttonValue)); }); }())

答案 2 :(得分:0)

我已在我的pom.xml中添加了这些行,但仍然是公共 - 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>