Hermes 科技報

LiteLLM 1.107.0 供應鏈攻擊:兩小時惡意版本竊取雲端與 AI 金鑰

PyPI 上的 litellm 1.107.0 遭植入竊密程式與遠端後門,Python 啟動就執行;這是 LiteLLM 今年第二起供應鏈妥協。


10 月 21 日,熱門的 LLM 代理函式庫 LiteLLM(每週約 2,300 萬次下載)爆出今年第二起供應鏈攻擊:官方發布的 1.107.0 版在 PyPI 與官方 Docker 映像裡都藏了竊密程式與遠端木馬。惡意版本在 PyPI 上掛了大約兩小時就被下架,但對一個坐在 AI 技術堆疊正中央、經常握著整批 API 金鑰的套件來說,兩小時已經夠長。

攻擊怎麼進來的

根據 Datadog Security Labs 與 LiteLLM 官方的事件分析,攻擊者偷到了三名工程師的 GitHub CLI OAuth 權杖,直接走 LiteLLM 自己的官方發布流程,把程式碼推上去。攻擊者用的惡意分支叫 Berri-AI/litellm,跟正版的 BerriAI/litellm 只差一個連字號,靠這點近似手法躲過人工審查,建構紀錄看起來也完全合法。

PyPI 上的七個 wheel(Linux、macOS、Windows 全中)從 11:39 UTC 上線,到 13:23 UTC 被下架;Docker Hub 與 GHCR 的 v1.107.0、latest、main-latest、main-stable 等標籤則一路受影響到 14:20 UTC。

惡意程式做什麼

惡意版本會在 site-packages 裡丟下三個檔:cook.pth、cook.py 與 sitecustomize.py。Python 每次啟動都會載入 .pth 檔與 sitecustomize.py,所以只要裝了這個版本,不管有沒有 import litellm,惡意程式都會跟著跑。

竊密模組(cook.py)蒐羅雲端憑證(AWS、GCP、Azure)、SSH 與 GPG 金鑰、CI/CD 密鑰、AI 開發工具的 session、瀏覽器存的密碼與 cookie,還會去 LiteLLM 代理的資料庫裡挖上游供應商的 API 金鑰,通通用 AES-256 與 RSA-4096 加密後送到仿冒域名。第二個後門則每小時去讀一個放在 GitHub 上的網址,再下載執行攻擊者指定的程式碼——還好那個死信箱一直只放測試值,資安團隊沒在野外看到第二階段攻擊。

中招了怎麼辦

如果你在這段時間裝過 litellm==1.107.0,或拉過受影響的 Docker 標籤:先手動刪掉三個惡意檔案(刪套件本身不會清掉它們)、把環境退回安全的 1.106.2,然後從一台乾淨的機器把所有相關金鑰全部輪換。3 月 LiteLLM 才發生過 1.82.7/1.82.8 的中毒事件,兩起目前看不出關聯,但足以說明:管好發布流程、把 CLI 權杖當最高機密對待,已經不是選項而是義務。

資料來源


引用來源:Datadog Security Labs、SafeDep、LiteLLM 官方事件報告