跳到主要內容

LiteLLM 供應鏈攻擊解析:官方出貨與簽章,為何仍會送出惡意成品?(2026)

最後更新: ·
LiteLLM 供應鏈攻擊:官方出貨也會中毒,包裹與憑證外流的原創示意圖

2026 年 10 月 21 日,LiteLLM 團隊在官方部落格發布了〈Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised〉。這起 LiteLLM 供應鏈攻擊的關鍵,是惡意內容經官方套件與容器發布渠道送出;下載位置可信,仍可能拿到遭污染的成品。對把多個模型金鑰集中交給 Gateway 的團隊,這是直接的憑證風險。

LiteLLM 供應鏈攻擊官方事件報告頁首,點圖開啟原文
圖/LiteLLM 官方事件報告;AlphaLab 擷取頁首並加上瀏覽器外框。點圖開啟原文。

先把公告的受影響範圍攤開,再看獨立研究如何解釋惡意程式,最後回到部署者能做的驗收。本文於 2026 年 10 月 23 日查閱;原報告可見的最後更新標示為 10 月 21 日 20:30 UTC,不能把事件「已控制」理解成所有受害環境都已恢復。

LiteLLM 供應鏈攻擊:已下架,與已清乾淨是兩件事

Incident contained, investigation in progress

中文:事件已受控制,調查仍在進行。

LiteLLM 事件報告的狀態標示

維護者的核心訴求是:確認部署是否接觸惡意版本,並立即處理可被主機讀取的秘密。下表的時間全部是 2026 年 10 月 21 日 UTC;它描述發布端的暴露窗口,先前取得的快取、鏡像與部署仍需另外盤點。

渠道公告列出的受影響成品官方時間紀錄
PyPIlitellm==1.107.0 的七個 wheel11:39:51 上架,至 13:23 前移除
Docker Hubv1.107.0、latest、main-latest、main-stable11:46:56 至 14:20 指向受影響 image index
GHCR同名標籤及公告列出的映像變體11:46:56 起;至 13:51 的驗證已顯示受影響標籤不可用

這些細節依維護者的版本清單與時間線整理。JFrog 的原始樣本分析另確認七個平台 wheel 帶有惡意檔案,並指出 Docker 映像也受影響。這比只重述「官方說出事」多了一層成品證據;但下載量、社群討論量與受害人數應分開,本文不估算受害總數。維護者另稱,從其私有 registry 取得 enterprise release的客戶未受這次發布污染影響;這項例外限定於該發布來源,不能僅憑企業客戶身分判斷。

原始碼標籤看起來正常,為何安裝包仍會出事?

The compromised artifacts were built from an attacker-controlled repository.

中文:遭入侵的發布成品,是從攻擊者控制的儲存庫建置而成。

LiteLLM 事件報告

把軟體發布想成一道出貨流程:儲存庫是設計稿,建置工作負責打包,wheel 或容器才是你收到的箱子。看過一份乾淨設計稿,尚未回答「這個箱子是不是照那份稿做出來」。兩者必須以實際建置來源、提交與產物識別連起來。

Endor Labs 的逐檔比對提供了具體證據:官方 v1.107.0 tag 與惡意建置來源不同;研究者看到的 source distribution 有額外打包設定,卻未包含 wheel 中的三個惡意檔案。因此,Git tag、來源壓縮檔與預先建好的 wheel,需要各自確認,不能只查其中一份就替其餘成品背書。

這也不是「以後全部自己編譯就結案」。自己編譯會把信任移到自己的建置機、工具與依賴;有價值的改善,是能指出實際使用的輸入與輸出,以及誰有權改變它們。

還沒 import LiteLLM,Python 啟動就可能碰到惡意掛鉤

Python 3.14 的 site 文件明確說明,一般啟動時會處理套件路徑中的 .pth;其中以 import 開頭的可執行行會執行,之後也會嘗試載入 sitecustomize。這是直譯器的初始化機制,並不以你的應用程式是否匯入某個業務套件為前提。

JFrog 在本次樣本中分析到 cook.pth、cook.py 與 sitecustomize.py,分別串起憑證蒐集與遠端程式載入。研究也區分平台差異:Windows 的該守護程序路徑會受 os.fork() 限制,但另一條蒐集路徑仍構成暴露。不能把一段後門流程跑不通,推成整個套件對該平台安全。

這改變了事故處理的第一步。平常看到壞套件,直覺是立刻啟動 pip 換版;在這次受影響環境,啟動所用的 Python 本身就可能再次觸發掛鉤。應由乾淨的管理環境接手,先隔離、保全證據,再清除或重建。本文不要求讀者下載或執行惡意樣本來「確認」。

為什麼 Gateway 失守,影響可能超過一把模型 API Key?

Gateway 的好處是集中路由、配額與供應商設定;同樣的集中,也讓它成為有價值的攻擊目標。部署者真正要問的是:這個執行身分能讀到哪些資料、連到哪些服務,而不是套件名稱裡寫了哪一家模型。

Endor Labs 的分析指出,樣本除了主機、雲端與開發工具憑證,還針對 LiteLLM 的憑證與模型設定資料表讀取。這證明惡意程式的蒐集目標與能力;某個受害部署實際外傳哪些秘密,仍需用它的權限、網路與事件證據重建,不能把目標清單直接當成每台機器已失竊的清單。

一個容易忽略的差別是:停掉舊容器,與撤銷已被複製走的憑證,各自需要完成。重建環境可以換掉程式;外部服務仍接受的舊金鑰,則要在供應商端撤銷或輪替。如何把秘密與 Agent 工作區分開,可搭配Agent 密鑰安全指南理解。

有簽章、有 Trusted Publishing,為什麼還擋不住?

PyPI 的安全模型文件把界線寫得很清楚:Trusted Publishing 以短效憑證降低長效發布 token 的管理風險,但它不宣告程式碼安全;被註冊為可信的 CI/CD 工作流,仍需受到保護。工作流本身的弱點,可能等價於發布憑證遭入侵。這次事件之前,JFrog 已記錄 LiteLLM 在 2026 年 3 月的另一次供應鏈入侵;維護者表示,後來曾加強發布流程。本文把兩次事故分開分析,不將攻擊者或最初入口連成同一條線。

LiteLLM 維護者在公告中描述,攻擊者取得多名開發者的 GitHub 憑證,繞過保護並改變工作流使用的來源,讓正式流程替污染成品完成發布。這段私有系統的入侵經過,本文保留為維護者調查說法;外部樣本能支持成品確實有問題,無法獨立還原所有內部授權動作。

同一份公告把 token 可能出現在回覆/日誌、內部部署可能遭入侵等情節接成一條線,也明說初始進入方式仍待確認。這裡不能直接改寫為「Claude Code 已被證實是本次攻擊根因」。若未來公布經過去識別化的日誌、時間線與修補細節,這條因果鏈才更容易被外界核對。

簽章回答的問題,取決於你驗證的是哪個身分、哪個產物與哪些宣告。若有權出貨的人與流程都被挪用,簽過名的箱子仍可能裝錯內容。這個案例要求更細的政策:發布權、改工作流的權限、來源儲存庫與審批權,應盡量避免落在同一條可被接管的信任鏈上。

AlphaLab 的判讀:真正要補的是三段可核對的連結

一、把「同名版本」連到真正收到的位元組

版本號方便溝通,仍需配合實際成品識別。Docker 的 digest 文件說明,tag 可改變指向,digest 則識別特定內容。保存已核准的 digest,能讓團隊比較「現在跑的」與「當時驗過的」是否一致;但若核准的就是惡意成品,固定 digest 只會穩定重現同一問題。

二、把「建置成功」連到允許的來源與權限

建置出一個可啟動映像,只表示工具完成工作。部署政策還要核對預期儲存庫、提交、工作流與產物雜湊,遇到來源改變就停下來。像這次報告所述的相似名稱儲存庫,應讓精確比對與權限政策處理,而不是靠值班者用肉眼看一眼拼字。

三、把「服務恢復」連到秘密與外部活動的處理

功能測試全過,只能證明它在測試範圍內能用。事故結案還需要另一張清單:可讀秘密已盤點、舊憑證已撤銷、乾淨環境已部署、外部使用紀錄已查核。這些成果應各有證據,不能互相代簽。

我同意這次事件值得立即盤點正式部署,也同意只看原始碼會漏掉成品層的風險。我存疑的是把還在調查的初始入口寫成定論,或用一次入侵推成所有 Gateway/所有簽章都失效。改進的價值在可驗收的控制;可先從Agent Harness 的工具與權限邊界建立全圖,再用AI Evals 的明確判準區分功能驗收與安全驗收。

LiteLLM 供應鏈攻擊後,部署者今天先做什麼?

先用部署、建置與 registry 紀錄盤點 1.107.0、相關 digest、下載快取及間接依賴;不要只看今天設定檔已換成哪一版。疑似受影響環境先隔離,由乾淨環境接手調查與憑證管理;避免為了盤點先啟動受影響的 Python 或 pip。

依官方處理段落,重建環境並盤點可觸及的模型供應商金鑰、Proxy master/virtual keys、資料庫與雲端身分。使用乾淨裝置處理撤銷,並查看異常 API、雲端及發布活動;清理順序與證據保存可交由負責事故應變的人執行。找不到單一標記檔,不能當成乾淨證明。

沒有暴露證據的團隊,則先補一份「核准來源→核准成品→實際部署」紀錄,加上最小權限與撤銷演練。既有的三台本機 AI 與 Gateway 教學可幫你定位元件;繼續接系統之前,把Harness 的停止條件與驗收也放入部署流程。先讓每一把鑰匙都有可追的去向。

接著閱讀

左右滑動查看更多推薦

今天先問自己的部署負責人一個具體問題:「目前執行的這個成品,能不能從 digest 追回核准的來源與建置?」接著再問:「如果它失守,哪些外部憑證必須撤銷?」能把這兩份答案寫完整,比只說自己使用官方版本更有保護力。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

週日 Weekly 週報+週二、週四 Alpha Signal,每週最多三封。

我們不會 spam,隨時可退訂。已訂閱?管理訂閱偏好(會寄登入連結到你的信箱)

主題篩選與退訂說明

寄送日期以台灣時間為準。主題偏好會篩選每期精選,並非每篇新文章的即時通知;當期符合主題的文章不足時會略過寄送。

未勾選任何主題會收到所有主題的精選,並不會停止寄信。

取消勾選 Alpha Signal 可停止週二、週四短報,仍保留週日週報。若要停止所有電子報,請使用信件底部的「取消訂閱」。