
PyPI检测前1.5万个热门Python专案的ZIP与RECORD状况,13,460个无异常,仅少数出现RECORD缺漏、文件标头不符或ZIP标头重複,显示新规对主流专案影响有限
Python官方套件库PyPI宣布强化上传端审核,目标是封锁利用ZIP解析差异的混淆攻击。由于常用安装器uv在解压ZIP档时的处理方式,与多数採用标準函式库zipfile模组的工具不同,攻击者可能藉由构造特殊或恶意ZIP,让其在不同安装工具中解压出不同内容,进而绕过检测或审核。
PyPI已开始拒收以混淆为目的建构的ZIP与wheel,并预告在2026年2月1日起,凡wheel内文件与.dist-info目录中的RECORD文件不一致将被直接拒收。官方同时表示,目前没有证据显示此手法曾在PyPI遭到滥用。
Wheel本质是ZIP档,ZIP标準为了兼顾旧系统相容性,支援追加写入功能,允许在不重写整个压缩档的情况下在档尾加入纪录,这虽然提高了相容性,但也增加实作複杂度。多数Python安装器惯用流程是先解压,再于安装位置生成或修补RECORD文件以方便解除安装,并未逐一比对压缩内容与RECORD是否一致,而形成攻击面。针对该项风险,uv已释出修补并对外对应CVE-2025-54368,凸显安装器之间对ZIP细节处理仍需一致化。
现在PyPI在上传流程加入多重检核,以降低软件供应链风险。系统会先依ZIP中央目录(Central Directory)判断文件清单与位移,再比对本地文件(Local File)档头是否一致,当侦测到无效纪录、重複档名、中央与本地文件纪录不符、档尾多余资料或出现多个End of Central Directory,以及EOCD Locator值错误就会拒收。此外既有的ZIP与tarball压缩炸弹(Compression-Bomb)侦测机制仍持续启用。对于RECORD一致性,PyPI先行寄发警示信,提供6个月过渡期,期满即切换为强制拒收。
官方指出,前1.5万个下载量最高的专案,多数符合规範且无需改动。官方盘点显示其中13460个没有任何RECORD或ZIP问题,仅极少数出现RECORD缺漏、标头不一致或重複档名等情况,显示此一强化措施对主流专案的影响较小。
PyPI建议一般使用者将安装工具维持在最新版本,以取得较一致的ZIP处理与安全行为。套件维护者若上传遭拒,可依错误讯息调整建置脚本或回报至建置工具专案,优先确保RECORD与实际内容对齐。安装工具开发者则应在解压前先读取中央目录,严格比对中央与本地文件纪录,并在安装步骤中验证RECORD与已展开文件一致,让格式与验证成为预设行为,降低供应链攻击面,同时提升跨工具的一致性与可预期性。