第三方开源 Python 项目的官方存储库 Python 包索引 (PyPI) 宣布计划对“关键 (critical) ”项目的维护者强制要求双重身份验证(2FA) 。“为了提高 Python 生态系统的总体安全性,PyPI 已开始对关键项目实施双重身份验证 (2FA) 要求;该要求将在未来几个月内生效。”
任何在过去 6 个月中下载量排名前 1% 的 PyPI 项目都被指定为关键项目。在该公告发布时,PyPI 上共有超过 350K 的项目,因此有超过 3500 个项目被指定为"关键";但这一数据每天都会进行刷新。此外,Python 软件基金会 (PSF) 的赞助商 Google 开源安全团队,将为关键项目的维护者提供免费的硬件安全密钥。
该举措主要是受 npm 和 PyPI 生态系统近期多次发生的软件库被劫持事件影响。去年,有着很大使用量的 npm 库,"ua-parser-js"、"coa 和 "rc"在其维护者账户被入侵后被恶意软件篡改。因此,npm 的母公司 GitHub 采取了措施,从 2021 年 12 月开始为开发者推出增强的登录体验(2FA选项),并在今年 5 月宣布进一步的安全更新。现如今,PyPI 也紧跟 GitHub 的步伐,也对维护者账户实施 2FA。
PyPI 管理员解释称,“确保最广泛使用的项目具有这些防止帐户接管的保护措施,是我们朝着为所有 PyPI 用户提高 Python 生态系统的总体安全性而做出的更广泛努力的一步”。他们还分享了一个显示超过 3,818 个 PyPI 项目的 dashboard 以及 8,218 个被他们认定为“关键”并且可能会被要求采用 2FA 的 PyPI 用户帐户。
此举得到了社区很多人员的支持,目前已有超过 28,000 个 PyPI 用户账户(包括那些与"关键"项目无关的账户)自愿启用 2FA。但也有开发者持不同的意见,一个高人气 Python 项目“atomicwrites”的开发者 Markus Unterwaditzer 就从 PyPI 中删除他的代码,并进行重新发布以寻求使得项目脱离"关键"项目的范畴。数据显示,atomicwrites 在某个月的下载量超过了 600 万次。
但 Unterwaditzer 此举引起了一些争议。一些人将这一举动与 2016 年的 left-pad 事件进行了比较,该事件涉及一位开发人员从 npm 注册表中撤回他的关键 JavaScript 项目,从而引发了大范围的连锁反应。不过 Unterwaditzer 只是重新发布'atomicwrites'的版本,以重置他的项目的下载数量(以及 PyPI 分配的"关键"项目状态),而不是永久性地撤回他的代码;和 left-pad 涉及商标纠纷的事件还是存在着一定的区别。
Unterwaditzer 在项目的 issue 列表中表示,他认为 PyPI 强制启用 2FA 是一个旨在保证少数公司的 SOC2 合规性的举措;但却以牺牲他的自由时间为代价,非常令人讨厌。
“所以我删除了该软件包并发布了一个新版本,只是为了看看警告是否消失。我没有考虑的是这会删除旧版本。那些版本现在显然已经消失了,但我显然不可能重新上传它们。我不认为 pypi 的行为是明智的,但无论哪种方式,我都对此感到抱歉。无论如何,API 自第一个版本以来一直是相同的。”
“我决定弃用这个包。虽然我确实很遗憾删除了这个包并最终启用了 2FA,但我认为 PyPI 的规则突然改变和包删除的奇怪行为并不值得我花时间免费维护这种流行的 Python 软件。我宁愿只是为了好玩而编写代码,只有在我真正得到报酬时才担心供应链安全。”
目前,在 PyPI 的 @dstufft 的帮助下,atomicwrites 的旧版本已经恢复。