跳到主要内容

CircleCI 安全事件

·5 分钟阅读
conda-forge/core
conda-forge 核心团队

在 2023 年 1 月初,CircleCI 通知我们,他们发生了大规模安全漏洞,第三方已获得访问存储在该服务中的所有环境密钥的权限。对于 conda-forge,这些密钥是用于将构建的软件包上传到我们在 anaconda.org 上的暂存区域的 API 令牌,以及我们为每个 feedstock 生成的唯一令牌。feedstock 令牌在我们工件暂存过程中用作一部分,以确保只有给定 feedstock 的维护者才能上传由该 feedstock 构建的软件包。1 月下旬,CircleCI 通知我们,他们的安全漏洞始于 2022 年 12 月 19 日,大部分密钥在几天后以纯文本形式从他们的服务器中泄露。恶意第三方如果可以访问这些密钥,则可能会在 conda-forge 上上传任何软件包的受损版本,从而进行所谓的“供应链”攻击。

我们已经制作了一份 所有可能受损工件的列表

如果您在非常敏感的环境中使用 conda-forge (我们不推荐!),请从您的系统中删除这些工件。

到目前为止,我们知道 conda-forge 中没有受损的工件。

conda-forge 频道的 API 令牌从未泄露,据我们所知仍然安全。

我们的回应

我们采取了以下步骤来应对此事件。

  • 我们立即开始轮换我们所有的 feedstock 令牌和我们的暂存区域上传令牌,作为预防措施。此令牌轮换遇到了一些错误,但在 2023 年 1 月 13 日已完成。
  • 我们制作了一份 2022 年 12 月 19 日至 2023 年 1 月 13 日期间上传的所有软件包的普查。此数据可以作为 JSON 文件下载。
  • 我们检查了在此期间构建的所有工件中是否包含 CicleCI 列出的恶意文件。我们在我们的工件中没有找到任何这些文件。
  • 如下文详述,我们已开始改造我们的 feedstock 令牌系统,使其更加强大,并在应对此类事件时具有更大的灵活性。
  • 我们已开始系统地使旧令牌失效,停用旧机器人,并最大限度地减少我们当前令牌的权限,以进一步增强 conda-forge 的安全性。

轮换我们所有的令牌是作为预防措施采取的。不幸的是,在此令牌轮换期间,我们的一个机器人遇到了一个错误,导致我们丢失了很大一部分 feedstock 的令牌。这种情况导致了长达五天的长时间中断,并在 2023 年 1 月 13 日完全令牌轮换完成时得到解决。

我们学到了什么?

我们从 feedstock 令牌系统和 CI 服务集成的常规维护中学习到了一些东西。我们可能早就应该知道这些,但我们现在才意识到。

  • 我们在多个 CI 服务中使用了相同的 feedstock 令牌。这限制了我们立即使与单个 CI 服务关联的令牌失效的能力,并且如果任何单个服务发生事件,则会暴露所有服务。
  • 我们的令牌系统仅允许每个 feedstock 有一个有效令牌。这种限制意味着我们无法从部分失败的令牌重置/轮换中恢复,并且在重置/轮换过程中容易出现可能导致软件包上传失败的竞争条件。
  • 我们需要更积极地清理已弃用/删除的 CI 服务。conda-forge 中 CircleCI 的使用已被弃用很长一段时间。如果我们花时间,并且有先见之明,在 CircleCI 被弃用时从中删除我们所有的密钥,我们本可以完全避免这次安全事件。

我们已开始改造我们的 feedstock 令牌系统,以修复上述已识别的问题,并使我们在应对安全事件时具有更大的灵活性。我们还开始了停用我们几个旧 CI 服务的流程。这些更改需要时间才能实施。您可以关注我们各个公共问题跟踪器上的进展情况。

结束语 & 您可以做什么?

我们,conda-forge 核心开发团队,要感谢大家在我们应对上述各种安全事件和错误时的耐心和支持。不用说,conda-forge 基础设施的公共性质带有风险。另一方面,通过公开,任何人都可以查看和验证我们的工件构建。conda-forge 的安全性在于降低风险,我们将继续尽力做到最好。

提醒一下,我们不建议您在包含敏感信息的环境中使用 conda-forgeconda-forge 的软件由我们的用户构建,核心开发团队无法验证或保证此软件不是恶意的或未被篡改。

我们抵御 conda-forge 中安全事件的最佳防线就是您!我们的 feedstock 维护者最有可能注意到事件和问题。如果您发现任何问题,请负责任地报告给我们,地址为 [email protected]