security - 马文 : security problems by repository and pluginRepositories defined in pom?

标签 security maven-2

想象一下现在的情况:

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

如果您现在下载源代码存储库并开始构建过程,根据我的理解,您的系统将面临多种安全风险:

  1. 默认的 Maven [plugin-] 存储库是通过 http 访问的 - 通过中间人攻击,有人可以向您发送操纵的包。如果插件存储库被拦截,这可能会导致注入(inject)代码作为构建过程的一部分执行

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

在我看来,这是严重的安全问题 - 还是描述有误?

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

最佳答案

乍一看你的论点是正确的。但是对于潜在的攻击者来说,有一些问题需要注意或不容易解决。

在大多数情况下使用的存储库是 Maven Central,它在 Sonatype 的控制下(据我所知)。这意味着可以访问这些机器并修改存储库本身的内容,或者只是注入(inject)一些基于校验和可能不是那么简单的内容,但当然这并不意味着不可能。此外,如果您从 Internet 下载工件,则您有一个最新的病毒扫描程序处于事件状态,它会在将其放入您的硬盘驱动器之前首先控制所有内容。这当然不是 100% 安全。

来到第二部分:如果您使用的项目在 pom 中定义存储库,这不是“最佳实践”……好吧……让我们假设一下。因此,您将使用这个“受感染”的项目 pom。但是它是如何投入到项目中的呢?这意味着攻击者必须拥有对该项目的提交访问权限,换句话说,他已经共享该项目很长时间了。此外,该项目的其他人会审查提交...所以这不会那么简单,但当然并非不可能。

根据我之前写的东西,有人怎么能保证存储库仅包含“安全”工件?谁应该控制/检查?将工件放入该存储库需要多长时间?

所以简单的答案是:不,使用 Maven 不是 100% 安全的,但如果我们稍微考虑一下互联网也不是 100% 安全的。在我看来,通过 Internet 的风险比来自 Maven 存储库的风险高得多,但我们当然应该忽略这一点。

唯一可能的解决方案是使用存储库管理器,它是下载工件的唯一来源,这意味着将 settings.xml 配置为仅使用它。并且非常重要的是,您控制放入该存储库的每个工件并对它们进行一些“安全”检查。但是谁会这样做,谁有时间/金钱/资源来做这些事情?

关于security - 马文 : security problems by repository and pluginRepositories defined in pom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7514421/

相关文章:

windows - Maven2 - Windows 中的 POM 配置问题

maven-2 - 在maven中需要时创建目录

security - 在 Istio 中使用 JWT 进行最终用户身份验证给出 'upstream connect error'

security - WIF 和 REST 很合适吗?

sql - 对主键使用 uniqueidentifier 是否更安全?

security - 刷新 token 和 JWT token 交互

Java——存储敏感数据

maven-2 - 有没有如何使用 maven-jar-plugin 的示例?

maven-2 - 无法通过 Nexus 代理到 Maven 仓库

java - 我应该在哪里放置 XHTML 文件才能使其在 GlassFish Web 容器中可见?