LiteLLM 表示,惡意的 1.107.0 於北京時間 10 月 21 日 19:40 左右發布到 PyPI、Docker Hub 和 GHCR,團隊在 21:32 發現。惡意版本和映像檔現已下架。只從 LiteLLM 私有倉庫拉取映像檔的企業部署不受影響。裝過或執行過 1.107.0 的,要把這些部署能存取的憑證都當作已外洩。應固定使用的乾淨版本是 1.106.2。
惡意套件做了什麼
根據 SafeDep 的分析,1.107.0 的 wheel 會在 site-packages 裡多放三個檔案,其中兩個在這台機器上每次啟動 Python 都會執行,即使行程根本沒有 import litellm。一個是憑證竊取程式,另一個是能下載並執行後續程式碼的後門。
SafeDep 列出的竊取對象包括:SSH 金鑰,雲端憑證(AWS、Azure、gcloud、Kubernetes、Docker),CI/CD 密鑰,AI 程式設計工具的 token,瀏覽器儲存的密碼,其他行程的環境變數;如果設定了 LiteLLM 代理資料庫,還會匯出裡面存的各家大模型 API key。LiteLLM 閘道往往存著團隊所有 provider 的 key,一台中招的代理就可能把它們全部外洩。閘道在團隊和模型廠商之間的位置,可以參考OpenAI 要求模型路由和 AI 閘道先獲批准的新規。
怎麼自查、怎麼處理
先確認有沒有哪台機器、哪個虛擬環境、容器映像檔或 CI 工作裝過 litellm 1.107.0,或者在事件期間拉過標籤為 v1.107.0、latest、main-latest、main-stable 的 LiteLLM Docker 映像檔。GitHub issue 的處置說明列出了這個套件會放進 site-packages 的檔案:cook.pth、cook.py 和 sitecustomize.py。
如果裝過 1.107.0,issue 給出的處置步驟是:
- 不要一開始就在受影響的環境裡執行 pip install。在那裡啟動任何 Python,包括 pip,都會再次執行惡意程式碼。
- 在 shell 裡,從每個受影響的 site-packages 刪除 cook.pth、cook.py、sitecustomize.py 以及對應的 .pyc 快取檔案。
- 結束後門啟動的那個脫離父行程的 Python 背景行程。
- 固定到 litellm 1.106.2 重新安裝,最好把映像檔和虛擬環境從頭重建。Docker 部署改用 v1.106.2 重新部署。
- 如果這台機器能連外網,就當作憑證已被偷走,把它能存取的全部輪換:模型 API key(包括 LiteLLM 代理資料庫裡存的所有 key,以及代理的 master key 和 virtual key)、雲端憑證和執行個體角色、SSH 金鑰、CI 密鑰、資料庫密碼,以及這台機器上任何行程環境變數裡的密鑰。
LiteLLM 官方給開源版使用者的建議是:固定到 1.106.2,或事件之前發布的某個明確版本。近期另一起開發工具資安事件,可以看OpenCode Console 資安事件。防守一側的例子,見AI 協助找出 PHP 嚴重漏洞,網站經營者該檢查什麼。
來源
- LiteLLM security statement on X (https://x.com/LiteLLM/status/2112945728565993864)
- LiteLLM GitHub issue #47826 (https://github.com/BerriAI/litellm/issues/47826)
- SafeDep analysis (https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/)
