
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與已展開檔案一致,讓格式與驗證成為預設行為,降低供應鏈攻擊面,同時提升跨工具的一致性與可預期性。
熱門新聞
2025-12-02
2025-12-01
2025-12-01
2025-12-01
2025-11-30
2025-12-04