整理 | 屠敏
如果說一年前的 Log4j2 漏洞宛如一枚「重磅炸彈」,席捲整個網際網路圈,那麼 2023 年的開春第一「炸」,則來自 PyTorch。
12 月 31 日,PyTorch 官方團隊緊急發佈了一則通知——《2022 年 12 月 25 日至 12 月 30 日期間,PyTorch-nightly 依賴鏈被破壞》,並呼籲只要在此期間通過 pip 在 Linux 上安裝 PyTorch-nightly 的開發者,請立即卸載此依賴項和 torchtriton,並使用最新的二進位制檔案。


PyTorch-nightly 依賴鏈被破壞
作為一門開源的 Python 機器學習庫,PyTorch 在計算機視覺、自然語言處理等維度都有較深的應用,它在商業和學術領域都獲得了突出的地位。根據《2022 中國開源貢獻度報告》顯示,PyTorch 超越 TensorFlow,成為最為主流的國際開源項目。因此,今日的稍有不慎,將影響很多應用程序。

國際開源項目TOP 50
具體該漏洞發現的起因源於 12 月 30 日下午 4:40 左右,PyTorch 團隊發現一個惡意軟體包被上傳到 Python 包索引(PyPI)程式碼庫,這個包的名字和該團隊在 PyTorch-nightly 索引上發佈的包相同。
由於 PyPI 索引具有優先權,這個惡意軟體包可以直接被安裝。

簡單來看,PyTorch 識別出一個與框架「torchtriton」庫同名的惡意依賴項。當開發者在 Python 生態系統中獲取依賴項時,PyPI 索引具有優先權,這導致惡意軟體包通常會優先於 PyTorch 官方的合法包被安裝到使用者的設備或軟體中。
PyTorch 官方團隊在部落格中解釋道,「由於 PyPI 索引優先,因此會導致使用者安裝了惡意軟體包,而不是官方儲存庫中的版本。這種設計會導致某些人能夠註冊與第三方索引中存在的軟體包同名的軟體包,並且 pip 將默認安裝其版本」。

用於道德研究?
根據官方披露的資訊顯示,PyPI 上的 torchtriton 包含了惡意的 triton 二進位制檔案。它的 SHA256 哈希列表在PYTHON_SITE_PACKAGES/triton/runtime/triton 位置。
SHA256(triton)= 2385b29489cd9e35f92c072780f903ae2e517ed422eae67246ae50a5cc738a0e
這個二進位制檔案的主要函數會執行以下操作:
獲取系統資訊
名稱伺服器來自/etc/resolv.conf
主機名來自gethostname()
當前使用者名來自getlogin()
當前工作目錄名稱來自getcwd()
環境變數
讀取以下檔案:
/etc/hosts
/etc/passwd
前 1,000 個檔案$HOME/*
$HOME/.gitconfig
$HOME/.ssh/*
通過加密的DNS查詢將所有這些資訊,包括檔案內容,上傳到域名*.h4ck[.cfd,使用DNS伺服器 wheezy[.io]。
該二進位制檔案的上傳功能僅限於大小小於 99,999 位元組的檔案。它也只上傳 $HOME 中的前 1000 個檔案(但.ssh目錄中的所有檔案<99,999位元組)。

迅速排查
值得注意的是,PyTorch 團隊表示,PyTorch 穩定軟體包的使用者不受此問題的影響。
想要排除自己的 Python 環境是否受到影響,可以通過以下命令在 torchtriton 包 () 中搜尋惡意二進位制檔案,通過 PYTHON_SITE_PACKAGES/triton/runtime/triton,並列印出你當前的 Python 環境是否受到影響 :
python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton'); affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0] if s is not None else '/' ) / 'runtime').glob('*'));print('You are {}affected'.format('' if affected else 'not '))"
惡意二進位制檔案在匯入 triton 包時執行,這需要顯式程式碼才能執行,而不是 PyTorch 的默認行為。
如果受到影響,可以通過以下命令進行卸載:
$ pip3 uninstall -y torch torchvision torchaudio torchtriton
$ pip3 cache purge
當然,截至目前,PyTorch 團隊已將「torchtriton」依賴項重新命名為「pytorch-triton」,並在 PyPI 上保留了一個虛擬包以防止類似的攻擊。
不過根據外媒 BleepingComputer 報道,惡意的「torchtriton」依賴項在過去一週內已超過 2,300 次下載,很多使用者下載了惡意軟體卻不自知,因此,早些做好檢測與防範也是對軟體安全負責。
參考:
https://pytorch.org/blog/compromised-nightly-dependency/