发行说明 – Maven 3.8.1

Apache Maven 团队宣布发布 Maven 3.8.1。

Maven 3.8.1可供下载

Maven 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一个中心位置管理项目的构建、报告和文档。

核心版本独立于插件版本。插件的进一步版本将单独制作。有关更多信息,请参阅插件列表。

如果您有任何问题,请咨询:

有关更改的概述

此版本涵盖两个 CVE:

CVE-2021-26291

我们收到了来自 Jonathan Leitschuh 的关于依赖 POM 中自定义存储库漏洞的报告。我们将其分为三个不同的问题:

  • 由于使用 HTTP 的自定义存储库可能导致中间人攻击
    现在越来越多的存储库使用 HTTPS,但情况并非总是如此。这意味着 Maven Central 包含带有通过 HTTP 引用 URL 的自定义存储库的 POM。这使得通过此类存储库的下载成为 MITM 攻击的目标。同时,开发人员可能不知道某些下载使用了不安全的 URL。因为上传到 Maven Central 的 POM 是不可变的,所以需要对 Maven 进行更改。为了解决这个问题,我们使用参数扩展了镜像配置<blocked>,并添加了一个新的external:http:*镜像选择器(如现有的external:*),意思是“使用 HTTP 的任何外部 URL”。
    决定默认阻止此类外部 HTTP 存储库:这是通过在conf/settings.xml阻止不安全的 HTTP 外部 URL 中提供镜像来完成的。

  • 由于使用废弃域的自定义存储库可能导致域劫持
    Sonatype 分析了哪些域被废弃并声明了这些域。

  • 通过重定向到自定义存储库可能劫持下载
    这是最难分析和解释的。简短的故事是:您很安全,依赖项仅从其上下文中的存储库中下载。所以有两个主要问题:上下文是什么,顺序是什么?该订单在存储库订单中进行了描述页。第一组存储库在 settings.xml(用户和全局)中定义。第二组存储库基于继承,最终超级 POM 包含指向 Maven Central 的 URL。第三组是最复杂的一组,但对于理解术语上下文很重要:从有效 POM 到工件的依赖路径的存储库。因此,如果一个依赖项是由另一个依赖项或一个 Maven 项目定义的,它还将包含它们的存储库。最后,这不是错误,而是设计功能。

CVE-2020-13956

Apache HttpClient 是 Maven Resolver 通过 Maven Wagon 传递的依赖项,因此我们已将这些版本更新为此版本的一部分。

为什么这个版本的值为 3.8.1?

  • 为什么不是 3.6.4?
    这不仅仅是一个错误修复,因为它包含三个导致默认行为更改的功能(外部 HTTP 不安全 URL 现在默认被阻止):如果您使用现在被阻止的存储库,则使用这个新的 Maven 版本时您的构建可能会失败。请在升级前检查并最终修复。

  • 为什么不是 3.7.0?
    Apache Maven 3.7.0 过去曾宣传它将是第一个您可以选择激活构建/消费者功能的版本:包含此功能的版本已重命名为 4.0.0。重用 3.7.0 可能会导致混淆,因此我们选择了下一个可用的次要版本。

  • 为什么不是 3.8.0?
    每个版本都有一个 72 小时以上的投票期。在 3.8.0 的投票过程中发现了一个错误,这个错误足以取消投票。使用 Maven,我们会刻录版本,以确保我们总是在谈论相同的“版本”。这样就永远不会混淆使用的是哪个 Maven 3.8.0。

当我的 HTTP 存储库被阻止时如何解决?

如果存储库是在您的 中定义的pom.xml,请在您的源代码中修复它。

如果存储库是在您的一个依赖项 POM 中定义的,您将收到如下消息:

[ERROR] Failed to execute goal on project test: Could not resolve dependencies for project xxx: Failed to collect dependencies at my.test:dependency:version -> my.test.transitive:transitive:version: Failed to read artifact descriptor for my.test.transitive:transitive:jar:version: Could not transfer artifact my.test.transitive:transitive:pom:version from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [blocked-repository-id (http://blocked.repository.org, default, releases+snapshots)]

要修复的选项是:

详细问题清单

漏洞

[MNG-7128] - improve error message when blocked repository defined in build POM

新功能

[MNG-7116] - Add support for mirror selector on external:http:*
[MNG-7117] - Add support for blocking mirrors
[MNG-7118] - Block external HTTP repositories by default

依赖升级

[MNG-7119] - Upgrade Maven Wagon to 3.4.3
[MNG-7123] - Upgrade Maven Resolver to 1.6.2

完整的变更列表可以在我们的问题管理系统中找到。

完整的发行说明

查看所有版本的完整发行说明