Maven:POM文件中定义的仓库和插件仓库会引起安全问题吗?

3

想象一下目前的情况:

您是一名开发人员,希望参与一个新的(开源)项目。该项目可以通过不同的方式构建,其中之一是Maven。

如果您现在下载源代码仓库并启动构建过程,则从我所了解的情况来看,您的系统将面临多种安全风险:

  1. 默认的Maven [plugin-]仓库是通过http访问的 - 通过中间人攻击,某人可能会向您发送被篡改的软件包。在拦截插件仓库的情况下,这可能会导致注入代码并作为构建过程的一部分执行

  2. 在文件pom.xml中,您可以添加第三方仓库和插件仓库。如果攻击者设法将自己的插件仓库添加到项目pom.xml中(例如开源项目),则其他人可能会受到这些插件的攻击。对于第三方仓库,我不确定 - 在项目pom.xml中定义的仓库是否可以覆盖在用户或系统级别定义的仓库?

在我的看法中,这些都是严重的安全问题 - 或者说描述有误吗?

如果我有一个基于Maven的项目 - 我如何确保运行Maven是安全的?是否有可信赖的仓库列表(仅包含不会损害其执行的计算机中数据的代码)?

1个回答

3
乍一看,你的观点是正确的。但是有一些问题需要注意或者说对于一个潜在攻击者来说并不容易解决。
在大多数情况下使用的存储库是 Maven Central,它受 Sonatype 控制(据我所知)。这意味着要访问这些机器并修改存储库本身的内容或者注入一些内容可能并不那么简单,因为需要考虑校验和等问题,但当然这并不是不可能的。此外,如果您从互联网上下载工件,则应该启用最新的病毒扫描程序,在将其放入硬盘驱动器之前先进行控制。当然,这并不是 100% 安全的。
接下来谈到第二部分:如果您正在使用一个定义了 pom 中存储库的项目,则这不是“最佳实践”...好吧...我们假设这样。那么你将使用这个“被感染”的项目 pom。但是它是如何被放入项目中的呢?这意味着攻击者必须拥有提交项目的权限,换句话说,他已经分享了该项目很长时间了。此外,项目的其他人员也会审查提交...所以这并不是那么简单,但当然也不是不可能的。
基于我之前写的东西,有谁能保证存储库只包含“安全”的工件?谁应该控制/检查这个?需要多长时间才能将工件放入该存储库?
所以简单的答案是:不,使用 Maven 不是 100% 安全的,但是如果我们仔细考虑一下,互联网也不是 100% 安全的。在我看来,通过互联网的风险比从 Maven 存储库中获取的风险要高得多,但当然我们应该忽略这一点。
唯一可能的解决方案是使用存储库管理器,这是唯一可以从中下载工件的源,这意味着配置 settings.xml 仅使用此存储库。非常重要的是,您要控制放入该存储库的每个工件,并对它们进行一些“安全”检查。但是谁会做这个,谁有时间/金钱/资源去做这些事情呢?

我从未谈论过感染存储库的事情。我谈论的是通过DNS欺骗或中间人攻击重定向到受感染的存储库。关于POM,我已经遇到过一个项目没有使用Maven,但被某人“Maven化”了。然后这个人发送了补丁,补丁被集成到了存储库中。对于不熟悉Maven的项目管理员来说,该如何决定是否值得提交这个补丁? - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接