Python软件包索引(PyPI)开始对维护者上传新文件施加时间硬约束——任何发布超过14天的版本,不再接受追加文件。这一早在2022年7月8日就集成进PyPI Warehouse代码库的规则,瞄准的是一个长期开放的供应链敞口:维护者以往可以随时给旧版本补传wheel包,而攻击者一旦拿到令牌或侵入CI/CD流水线,就能把恶意文件塞进开发者已经信任的版本里。
过去,这种“开放式发布”给生态带来了便利。比如一个包维护者想在不改变版本号的情况下,仅仅为新Python版本补充一个兼容wheel,直接上传即可。但同样的机制也为攻击者留了后门。如果攻击者窃取了PyPI API令牌、污染了持续集成管道,或滥用了可信发布工作流,就可以在不改变版本号的情况下,向一个长期没动静的发布注入恶意文件。由于版本号毫无变化,常规依赖更新和审计很难把这种改动揪出来。
![]()
PyPI方面表示,此前并未发现攻击者专门利用这一弱点发动真实的供应链攻击,但平台也没有任何技术手段来阻止这种场景——唯一的防线只是攻击者“可能还没注意到这个机会”。然而,2022年LiteLLM和Telnyx等流行Python包相继遭入侵的事件,把自动化发布环境如何变成攻击入口的风险摆到了台面上。PyPI由此下决心收窄窗口。
根据新规则,一旦某个版本发布超过14天,PyPI就会拒绝任何新增文件的上传请求。这意味着,即便维护者的账户凭证日后被攻破,攻击者也无法悄悄往一个已被大量下载的旧版本里“搭便车”。如果确需给新版Python提供支持,维护者通常需要直接创建一个新的包版本,而不是在老版本上补文件。这一变动也让事件响应变得清晰很多:过去同一个版本内部可能混杂合法和恶意文件,用户面对某个发布版本根本说不清到底安不安全,现在版本等于被“锁定”,出问题追溯范围更明确。
在规则落地前,PyPI团队特意翻阅了历史发布行为,来评估影响面。他们检查了下载量排名前1.5万个包中与Python 3.10兼容的wheel文件,结果只找到56个项目在原发布超过14天后补传过兼容wheel。也就是说,要求另行创建新版本来交付新兼容性文件,对绝大多数维护者而言几乎没有额外负担,却能换回整个生态对旧版本完整性的更高信心。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.