Python漏洞允許在35萬個項目中執行代碼
Python 編程語言中一個被忽視了 15 年的漏洞現在重新成為人們關注的焦點,因為它可能會影響超過 35萬個開源存儲庫并可能導致代碼執行。
該安全問題于 2007 年披露并標記為 CVE-2007-4559,從未收到補丁,唯一提供的緩解措施是警告開發人員有關風險的文檔更新。
自 2007 年以來未修補
該漏洞位于 Python tarfile 包中,在使用未經處理的 tarfile.extract() 函數或 tarfile.extractall() 的內置默認值的代碼中。
這是一個路徑遍歷漏洞,使攻擊者能夠覆蓋任意文件。

自 2007 年 8 月首次報告以來,CVE-2007-4559 的技術詳細信息已經可用 。雖然沒有關于攻擊中利用該漏洞的報告,但它代表了軟件供應鏈中的風險。
今年早些時候,在調查另一個安全問題時,Trellix 的一名研究人員重新發現了 CVE-2007-4559,Trellix 是一家提供擴展檢測和響應 (XDR) 解決方案的新企業,由 McAfee Enterprise 和 FireEye合并而成。
“在調用 tarfile.extract() tarfile.extractall() 之前未能編寫任何安全代碼來清理成員文件會導致目錄遍歷漏洞,從而使不良行為者能夠訪問文件系統” - Charles McFarland,漏洞研究員Trellix 高級威脅研究團隊
該缺陷來源于Python 的 tarfile 模塊中的 extract 函數中的代碼明確信任 TarInfo 對象中的信息“并加入了傳遞給 extract 函數的路徑和 TarInfo 對象中的名稱”

CVE-2007-4559 - 與文件名
披露后不到一周,Python 錯誤跟蹤器上的一條消息宣布該問題已關閉,修復正在更新文檔并警告“從不受信任的來源提取檔案可能很危險”。
估計有 35萬個項目受到影響
通過分析影響,Trellix 研究人員發現該漏洞存在于數千個開源和閉源軟件項目中。
研究人員抓取了一組 257 個更有可能包含易受攻擊代碼的存儲庫,并手動檢查了其中的 175 個以查看它們是否受到影響。這表明其中 61% 的人很脆弱。
對其余存儲庫運行自動檢查將受影響的項目數量增加到 65%,這表明存在廣泛的問題。
然而,這個小樣本集僅作為估算 GitHub 上所有受影響的存儲庫的基準。
“在GitHub 的幫助下,我們能夠獲得一個更大的數據集,其中包含588840 個獨特的存儲庫,其中包含在其 python 代碼中的 'import tarfile'”
使用手動驗證的 61% 的漏洞率,Trellix 估計有超過 35萬個易受攻擊的存儲庫,其中許多用于幫助開發人員更快地完成項目的機器學習工具(例如 GitHub Copilot)。
這種自動化工具依賴于來自數十萬個存儲庫的代碼來提供“自動完成”選項。如果他們提供不安全的代碼,問題就會在開發人員不知情的情況下傳播到其他項目。

GitHub Copilot 建議易受攻擊的tarfile提取代碼
進一步研究該問題,Trellix 發現易受 CVE-2007-4559 攻擊的開源代碼“跨越了眾多行業”。
正如預期的那樣,受影響最大的是開發部門,其次是網絡和機器學習技術。

跨行業存在的易受 CVE-2007-4559 影響的代碼
利用 CVE-2007-4559
在今天的一篇技術博客文章中,重新發現了該漏洞的 Trellix 漏洞研究員 Kasimir Schulz 描述了在 Windows 版本的 Spyder IDE(一種用于科學編程的開源跨平臺集成開發環境)中利用 CVE-2007-4559 的簡單步驟。
在這個演示視頻中,我們展示了攻擊者如何利用 Spyder IDE 中的 tarfile 漏洞。Spyder IDE 使用擴展名為 .spydata 的文件類型,該數據用于填充變量資源管理器,并且該文件通常在研究人員之間共享。但是,由于 .spydata 文件實際上是一個 tar 文件,因此程序使用 tarfile 來提取 .spydata 文件中的所有文件。在視頻中,我們展示了我們如何利用它來覆蓋程序源代碼,甚至添加社會工程方面來嘗試獲得管理員訪問權限。
研究人員表明,該漏洞也可以在 Linux 上利用。他們設法在 Polemarch IT 基礎設施管理服務的測試中升級文件寫入并實現代碼執行。
在此演示視頻中,我們展示了攻擊者如何利用polemarch IT 管理框架中的tarfile 漏洞。通過告訴程序與我們的惡意“項目”同步,我們能夠讓程序提取我們惡意制作的 tar 文件,覆蓋 Polarmarch 用戶的現有 bashrc。下次有人登錄時,他們會收到消息說他們已被黑客入侵并被踢出局。
除了引起對漏洞及其帶來的風險的關注外,Trellix 還為超過 11,000 個項目創建了補丁。修復程序將在受影響的存儲庫的分叉中提供。稍后,它們將通過拉取請求添加到主項目中。
由于受影響的存儲庫數量眾多,研究人員預計未來幾周將有超過 70,000 個項目得到修復。然而,達到 100% 的目標是一項艱巨的挑戰,因為維護者也需要接受合并請求。
Python 軟件基金會就 CVE-2007-4559 到目前為止未發表建議。

本博客的目的是深入研究漏洞的技術細節,并展示攻擊者編寫漏洞利用程序是多么容易。在博客的過程中,我們還將探索編寫一個工具的過程,該工具通過利用 AST 中間表示的力量來自動檢測源代碼中的 tarfile 漏洞。最后,這篇文章將向您介紹我們如何利用一個流行的開源存儲庫,使用路徑遍歷攻擊來執行代碼。