【问题标题】:Are Maven Central and JCenter vulnerable for typosquatting?Maven Central 和 JCenter 是否容易被域名抢注?
【发布时间】:2019-06-15 00:22:27
【问题描述】:

Maven Central 和 JCenter 是否容易受到域名仿冒?可以通过拼写错误的工件 ID 来获得恶意依赖吗?可以采取哪些措施来降低风险?

【问题讨论】:

  • @NathanHughes,假设我不使用它们中的任何一个作为代理。我的构建直接从公共存储库中获取工件。顺便说一句:我在哪里可以找到有关排除您提到的功能的更多信息?

标签: java maven security gradle


【解决方案1】:

如果您直接使用 Central/JCenter(正如您在 cmets 中提到的那样),我建议永远不要在公司基础设施内部构建会打开攻击向量的原因(理论上)。在这种情况下,总是建立在一个开放的基础设施上,比如 travis、circleci 等。

如果有人想根据您描述的场景将恶意工件放入 Central(我不能代表 JCenter;如果我没记错的话或多或少相同),则需要访问单个(坏)人可以访问一个已知组,该组包含众所周知的和最重要的在广泛领域使用的工件。这意味着这个坏人需要获得通过包括签署工件在内的不同领域发布工件的权限。

好吧,让我们假设有人已经克服了前面描述的障碍。

因此,工件的命名需要与其他工件非常相似。现在有人需要打一个特殊的错字,这个特殊的工件将被拾取。其次,它需要以某种方式执行(也许可以进行单元测试/集成测试)。

所以最后我会说:理论上是的,实际上非常不可能。

但当然不可能 100% 安全,所以一般建议:

  • 始终通过 https 传输(至少 TLSv1.2)
  • 检查工件的校验和(如果 checksums do not fit,则构建失败)
  • 在开发过程中使用审核流程

所以我只能建议在公司内部使用repository manager,当然还要使用检查已知漏洞等的安全扫描器。

此外,所有存储库管理员都可以选择在使用之前阻止任何依赖项,并在您的公司内部进行某种审批流程,缺点是花时间“可能”购买更多安全性。

【讨论】:

  • 如果我们稍微改变一下会怎样:想象一下组 id 中的拼写错误。然后根据你首先描述的场景,最棘手的部分已经消失了。
  • > “我建议永远不要在公司基础设施内部构建会打开攻击向量的原因(理论上)。”好吧,当人们在开源项目上工作时,这是不可能的。
  • 非常简单,如果您正在开发一个开源项目,请使用我已经提到的开放构建基础架构(例如 travis/circleci 等)。其次,如果您的 groupId 中有错字,您很可能有一个不存在的工件..与其他事情提到的相同...我的结论保持不变...
  • 首先——虽然 CI 可以迁移到公共基础设施,但开发人员仍然需要在开发周期中在本地机器上运行构建。关于第二个 - 谁阻止一个人创建例如 org.apache.conmons 组并将具有正确工件 ID 的中毒工件放在那里?
  • 如果你真的担心你应该阻止像这样的开源工作。除此之外,您不需要在本地构建。可以在开源基础设施上完成和构建分支工作。无需在本地构建(如果您真的想以这种方式工作)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2021-07-02
  • 2020-11-19
  • 1970-01-01
  • 2014-06-24
  • 2016-02-24
  • 2015-06-28
相关资源
最近更新 更多