PyPI 发布版本现在在14天后拒绝新文件上传
摘要
PyPI 现在拒绝向超过14天的发布版本上传新文件,这是一项安全措施,旨在防止通过篡改旧版本来实施的供应链攻击。这一变化是由 LiteLLM 和 Telnyx 遭入侵等事件推动的。
<p><a href="https://lobste.rs/s/53g8f7/pypi_releases_now_reject_new_files_after">评论</a></p>
查看缓存全文
缓存时间: 2026/07/22 16:23
# 发布版本现拒绝14天后上传新文件 - Python 包索引博客
来源:https://blog.pypi.org/posts/2026-07-22-releases-now-reject-new-files-after-14-days/
安全 (https://blog.pypi.org/tags/#tag:security)
Python 包索引 (PyPI) 现在拒绝向超过14天的发布版本上传新文件。此项限制 (https://github.com/pypi/warehouse/pull/19727) 是为了防止在 PyPI 项目的发布令牌或工作流遭到泄露时,旧且长期稳定的版本被投毒。据我们所知,目前尚未发现此行为被滥用,但除了攻击者不知道这是可行的之外,没有其他技术原因。
用户目前不应依赖此行为,因为尚未定义“不再接受新文件的发布版本”的语义,也没有可用于确认发布状态的 API。相反,这些语义将在“Upload 2.0 API”和“Staged Previews”通过 PEP 694 (https://peps.python.org/pep-0694/) 标准化后定义。
此行为的讨论始于2024年1月 PEP 740(数字认证)期间 (https://discuss.python.org/t/restricting-open-ended-releases-on-pypi/43566)。在流行软件包 LiteLLM 和 Telnyx 遭到入侵后 (https://blog.pypi.org/posts/2026-04-02-incident-report-litellm-telnyx-supply-chain-attack/),讨论于2026年3月重启 (https://discuss.python.org/t/restricting-open-ended-releases-on-pypi/43566/34)。这些软件包之所以被入侵,是因为这些项目在 Trivy GitHub Action 的使用中存在“可变引用 (https://mikael.barbero.tech/blog/post/2026-03-24-stop-trusting-mutable-references/)”问题。
最初,由于某些项目依赖此行为来为已发布的版本添加对新 Python 版本的支持,讨论陷入了停滞。为了量化这一变化对现有工作流程的破坏程度,PyPI 数据库被查询了那些向旧版本发布新文件的项目 (https://discuss.python.org/t/restricting-open-ended-releases-on-pypi/43566/48)(按发布后的天数分桶)。随后,特别针对前15000个包查询了 `cp314` 轮子,结果显示,在15000个项目中,只有56个项目 (https://discuss.python.org/t/restricting-open-ended-releases-on-pypi/43566/63) 在发布版本超过14天后发布了兼容3.14的轮子。
PyPI 安全与保障工程师 Mike Fiedler 在 PyCon US 2026 的打包峰会上 (https://hackmd.io/k0C-RAIVRnu-YXoDFgABvA) 提出了这一话题。讨论的粗略共识是,峰会参与者认为“要求用户升级到下一个版本”以支持新 Python 版本是可以接受的。基于数据和共识,Seth 推进了一个补丁 (https://github.com/pypi/warehouse/pull/19727),拒绝向旧版本上传新文件,该补丁于2026年7月8日合并。
这一变化将保护 Python 用户,并减少 PyPI 管理员因项目被入侵而需要进行的“清理”工作。此限制还意味着,入侵不会使发布版本处于既“被入侵”又“未被入侵”的不确定和混乱状态,即只有部分文件可能被恶意软件投毒。敬请期待未来的 Upload 2.0 API,它将为“已关闭”而非“开放”的发布版本提供语义。
Seth Larson 和 Mike Fiedler 在 Python 软件基金会的工作得到了 Alpha-Omega (https://alpha-omega.dev/) 的支持。
相似文章
引用Seth Larson
PyPI现在拒绝向超过14天的发布版本上传新文件,以防止供应链攻击,这是由Seth Larson宣布的一项主动安全措施。
@RhysSullivan: 刚刚在我机器上启用了 npm 包安装的最小年龄限制,早就该这么做了,如果你还没做的话……
一位开发者分享了一个技巧,为包安装配置最小发布年龄以缓解供应链攻击。
Dependabot 版本更新引入默认包冷却期
Dependabot 现在在打开版本更新 PR 前会等待三天,以降低供应链攻击的风险。安全更新仍然是即时的。
npm/Docker/PyPI的供应链安全模式正在MCP上重演,我们正处于2015年的时刻
文章警告称,MCP生态正在重演npm、Docker和PyPI中出现的供应链安全模式——审核极少,风险日益增长。文章指出,对500个Smithery服务器的扫描发现18.8%存在安全问题,现有安全工具无法处理恶意智能体指令,并介绍了一个名为bawbel的新型静态扫描器。
@altryne: 公开提醒:如果你尚未了解最新的供应链攻击,或者知道但无动于衷且未采取任何措施,尤其是……
一则关于通过 npm 和 PyPI 针对 AI 开发者工具(Hermes、OpenClaw)的供应链攻击的公开提醒,特别是名为“Mini-Shai Hulud”的蠕虫病毒,它能自我复制并窃取凭据、API 密钥和浏览器会话。文章建议使用沙盒执行并限制软件包年龄以降低风险。