开发者生态
morning
Composer 和 Packagist 供应链安全更新
2026-05-27
1 阅读
Seldaek
过去几个月,尤其是过去几周,针对开源生态系统的软件供应链攻击越来越多。其中一些也通过接管 GitHub 帐户和窃取访问令牌而袭击了 PHP 生态系统,攻击者可以在他们无法合法访问的包上发布新标签。最值得注意的是 5 月 22 日的 laravel-lang 和 4 月 30 日的 intercom/intercom-php 。这篇文章是对 Composer 和 Packagist.org 供应链安全工作目前状况的更新:已经到位的内容、未来几周内发布的内容以及我们正在处理的长期项目。我们已经关注这个领域近一年了,有足够的内容值得将其集中到一个地方。如果您在 Packagist.org 上维护任何软件包并且未启用 MFA,请立即启用它。我们将开始将包维护者 MFA 状态发布到包透明度日志,并且它将在配置文件中可见。有关详细信息,请参阅下面的 MFA 部分。 TL;DR 现已到位:Aikido 恶意软件检测已集成到 Packagist.org 和 Composer 消耗的包元数据中(向具有适当免费许可证的更多数据提供商开放)。 Packagist 团队进行快速手动事件响应。公开透明日志,准确记录了近期攻击中使用的git标签修改。本周发布:Composer 2.10,引入了统一的依赖策略框架,涵盖恶意软件标记的版本、漏洞建议和废弃的软件包。 Packagist.org 上稳定的版本不变性:已标记的版本不再可以通过在 git 存储库中重新标记来静默重写。 Private Packagist 中的新供应链安全功能可用于组织范围内的控制,将在接下来几天的后续帖子中详细介绍。更可预测的 Composer 安装下载行为(弃用源回退)。在接下来的几周和几个月内推出:Composer 中的最小发布年龄/冷却依赖策略。改进了 Packagist.org 上的管理工具:手动恶意软件源覆盖、旧版 Composer 客户端的除名、活动帐户泄露期间的包冻结。 MFA 事件出现在透明度日志中; MFA 状态在维护者资料中可见。组织包所有权,用适当的多用户管理和包供应商范围的配置选项替换共享公司帐户。长期方向:Packagist.org 上的强制 MFA,在组织级别具有更严格的要求 FIDO2 支持的分阶段发布流程,对于具有大型用户群的软件包是必需的 Packagist.org 直接托管不可变的构建工件,并在 Composer 客户端验证 SLSA 构建来源和 Sigstore 证明。将 Composer + Packagist 堆栈引入 OpenSSF 保护软件存储库工作组包存储库安全授权 L3 原则和 SLSA 工作草案依赖项轨道 L3 和 L4。这篇文章的其余部分将详细介绍每一个内容。检测和事件响应 2026 年 3 月,Packagist.org 开始从 Aikido 导入恶意软件检测结果(请参阅composer/packagist#1681)。当版本被标记时,警告会在 Packagist.org UI 中显着显示,并包含在提供给 Composer 的包元数据中。 Aikido 在最近的每起事件中都标记了恶意版本。 Packagist.org 的运营团队在检测后几分钟内就对每个事件做出了响应,在大规模安装之前提取受影响的软件包或版本。不过,手动干预并不是我们希望这一过程长期依赖的快速反应类型,接下来的大部分内容都是用预防代替反应。透明度日志 Packagist.org 有一个公共透明度日志(需要登录),用于记录存储库中与安全相关的事件。它涵盖了包所有权更改、维护者添加和删除、用户更改以及版本引用更改等内容。日志是用于调查用例和持续监控风险的工具。如果您有兴趣在其之上构建工具或集成,请通过 contact@packagist.org 或 GitHub issues 联系,并帮助塑造此日志的 API。透明度日志的工作由德国主权技术机构资助,它在处理最近的攻击方面直接发挥了作用。最近几乎每次针对 Packagist 的供应链攻击的关键要素之一都涉及攻击者在事后修改现有的 git 标签。透明度日志准确地记录了每一项修改,这让我们能够准确识别被操纵的内容并重建每次攻击的精确时间表。为什么这种记录总体上很重要?所有权变更和接管。当包裹易手时,每个下游用户都有合法的知情权。公共日志意味着任何感兴趣的人都可以看到广泛使用的库的突然新维护者,而不仅仅是 Packagist.or