Python編程語言中一個被忽視15年的漏洞,正在重新引發人們的關註,因為它可能對超過35萬個開源存儲庫項目造成影響。其實早在2007年,就已經有安全研究人員披露並標記過CVE-2007-4559。遺憾的是,它一直沒有獲得正式的修復補丁。唯一的緩解措施,也隻是在更新後的開發者文檔中提示相關風險。但是現在,該漏洞又被發現可用於代碼執行。
Bleeping Computer 指出,該漏洞位於 Python tarfile 包中。在使用未經處理的 tarfile.extract() 函數、或 tarfile.extractall() 內置默認值的代碼中,這個路徑遍歷漏洞就有可能被利用於覆蓋任意文件。
雖然自 2007 年 8 月首次報告以來,我們一直沒有聽說與 CVE-2007-4559 有關的漏洞利用報告,但它確實向外界提示軟件供應鏈中長期被忽視的風險。
Spyder IDE Demo Video - Trellix(via)
今年早些時候,Trellix 的一位安全研究人員在調查另一個安全問題時、再次揪出 CVE-2007-4559 。
作為一傢提供擴展檢測和響應(XDR)解決方案的新企業,它由 McAfee Enterprise 和 FireEye 合並而來。
來自 Trellix 高級威脅研究團隊的 Charles McFarland 指出:
在調用 tarfile.extract() 和 tarfile.extractall() 之前,若開發者未能編寫任何安全的代碼來清理成員文件,就會導致該目錄遍歷漏洞被不良行為者利用於訪問文件系統。
該缺陷源於 Python 的 tarfile 模塊 / extract 函數中的代碼,其明確信任 TarInfo 對象中的信息,並加入傳遞給 extract 函數的路徑和 TarInfo 對象中的名稱。
Polemarch Demo Video - Trellix(via)
披露後不到一周,Python 錯誤追蹤器上的一條消息,就稱該問題已經被關閉。更新文檔指出,官方正在修復該問題,並提醒大傢始終不要通過不受信任的來源來提取檔案、否則會陷入相當大的風險。
通過分析,Trellix 研究人員發現該漏洞波及成千上萬個開源和閉源軟件項目。在隨手拉來的一批 257 個有較高可能性包含易受攻擊代碼的存儲庫中,他們手動檢查其中 175 個,結果表明風險率高達 61% 。
在對其餘存儲庫開展自動檢查後,可知這一幾率增加到 65%,表明問題的存在相當廣泛 —— 而且這還隻是針對 GitHub 這一個代碼托管平臺的評估結論。
Charles McFarland 補充道:“在 GitHub 幫助下,我們獲得一個更大的數據集 —— 其中有 58 萬 8840 個獨特的存儲庫在其 Python 代碼中包含 import tarfile”。
手動驗證的漏洞率高達 61%,Trellix 預估有超過 35 萬個存儲庫易受該漏洞攻擊的影響,且其中不乏幫助開發者更快完成項目的多款機器學習工具 —— 比如 GitHub Copilot 。
這款 AI 編程輔助工具依賴於來自數十萬個存儲庫的代碼,來提供便捷的“自動完成”編程體驗。但若參考代碼本身就不夠安全,問題就會在不知不覺中傳播到更多無辜的新項目中。
通過深入研究,Trellix 發現易受 CVE-2007-4559 漏洞攻擊的開源代碼,橫跨眾多的行業。
如預期那樣,開發部門(Development)首當其沖,其次是人工智能(AI)/ 機器學習(ML),以及 Web、安全、管理員工具等項目。