在現代軟體開發中,我們極度依賴第三方套件來加速開發,但這也帶來了嚴重的供應鏈攻擊風險。所謂的供應鏈攻擊,是指攻擊者透過入侵上游套件的維護者帳號或篡改寫原始碼,將惡意程式碼植入合法套件中。一旦新版本發布,全球成千上萬的 CI 系統與開發者會在短時間內透過自動更新將病毒引入內部環境。為了應對此問題,Pip 26.1 引入了兩項關鍵功能:依賴冷卻機制(Dependency Cooldowns)以及實驗性的 Lockfile 支援。
依賴冷卻機制:為安全贏得時間
許多供應鏈攻擊遵循一個共同模式:攻擊者上傳惡意版本後,會迅速利用自動化更新機制將其散播。如果開發者在套件上傳後的幾小時內就安裝它,幾乎沒有機會發現異常。
依賴冷卻機制的核心邏輯是強制執行一個等待期。透過使用 uploaded-prior-to 參數,例如設定為 P7D(代表 7 天),Pip 將只會安裝在 PyPI 上存放至少 7 天的版本。這意味著最新發布的版本在冷卻期結束前不會被下載。
從實務數據來看,這種做法非常有效。研究顯示,在十起著名的供應鏈攻擊中,有八起攻擊的機會窗口小於一週。如果設定 7 天的冷卻期,就能攔截絕大多數的即時攻擊;若延長至 14 天,則幾乎能攔截所有此類攻擊。
然而,冷卻機制並非萬能。針對像 XZ Utils 那種潛伏數年才發動的長期滲透,或者像 Essential Plugin 那種 dormant 靜默數月後才啟動的後門,短期的冷卻期無法攔截。此外,這也會導致合法的緊急安全修補程式(Security Patches)無法立即安裝。因此,建議工程團隊在啟用冷卻機制的同時,搭配 Dependabot 或 pip-audit 等工具,以便在冷卻期過後能迅速識別並更新必要的安全補丁。
標準化 Lockfile:邁向確定性的環境重建
長期以來,Python 社群對於 Lockfile(鎖定檔)缺乏統一標準。Lockfile 的作用是記錄所有直接與間接依賴套件的精確版本號,確保在不同機器、不同時間點安裝的環境完全一致,避免因為套件版本微調而導致的 Bug。
先前只有像 uv 這樣的第三方工具能高效處理 Lockfile,而 Pip 26.1 現在開始實驗性支援 PEP 751 定義的 pylock.toml 格式。現在開發者可以使用 pip install -r pylock.toml 直接從鎖定檔安裝依賴。
這項變動之所以重要,是因為 Pip 作為 Python 預設的套件管理工具,具有極高的普及率。在許多企業環境或精簡版 Docker 鏡像中,安裝額外的工具(如 uv)可能涉及權限或部署成本問題。Pip 原生支援 pylock.toml,讓企業能更容易地在生產環境中實現確定性的依賴管理,而不需要改變既有的部署流程。
安全修補與版本更新
除了上述功能,Pip 26.1 同時修復了兩個重要的安全漏洞。其中一個是關於檔案格式誤判的問題,防止攻擊者利用 .tar.gz 偽裝成 zip 檔來隱藏惡意代碼;另一個則是修復了在自我檢查過程中可能觸發的任意代碼執行(ACE)漏洞。此外,內建的 urllib3 庫也升級至 2.6.3 版本,進一步強化了網路傳輸的安全性。
總結來說,Pip 26.1 的更新方向非常明確:透過冷卻機制降低即時攻擊風險,透過 Lockfile 增加環境可預測性,並持續修補底層安全漏洞,共同提升 Python 生態系的供應鏈韌性。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。