資安指南

LiteLLM 1.107.0 夾帶憑證竊取程式(2026 年 10 月):受影響的 PyPI 版本與 Docker 映像檔,以及使用者該怎麼做

2026 年 10 月 21 日,PyPI 與 Docker 上的 LiteLLM 1.107.0 含有憑證竊取程式。依 BerriAI 說明:受影響的版本與標籤、時間範圍、不在此次入侵範圍內的版本,以及該輪換哪些金鑰。

發布於 2026-10-22 更新於 2026-10-24 最後核實 2026-10-24 閱讀時間 8 分鐘
本頁內容

適用對象:使用 LiteLLM 的開發者與維運人員。LiteLLM 是一款開源工具,可透過單一介面呼叫多種 LLM(大型語言模型)API,可作為 Python 函式庫使用,也可作為在 Docker 中執行的 proxy(LLM 閘道)使用。

本文依據 LiteLLM 的開發公司 BerriAI 的官方公告,以及該公司在 GitHub 上發布的狀態更新。本文不涵蓋攻擊手法、惡意程式的內容,或具體的入侵指標(IoC)數值。檔案名稱與映像檔摘要值(digest)請查看公司的公告頁面。

進行中:該組織發布更多資訊時,本文將隨之更新

截至 2026 年 10 月 24 日 11:00 UTC(20:00 JST)

尚未得知

  • 防止再次發生的改進措施(公司表示將在下週分享)
  • 受影響的使用者或環境數量
  • 被竊資料是否已遭使用

10 月 23 日(UTC),公司表示已完成對攻擊鏈的調查,並發布了根本原因分析。公司表示,調查期間發布的狀態更新中,有些假設「不正確或不完整」,並表示該分析是正式依據。第一篇事件貼文維持原樣未改。

使用者需要做的事(受影響的版本與時段、清理、該輪換哪些金鑰)自第一篇貼文以來沒有改變。10 月 24 日(UTC),公司發布了 1.103.8、1.104.6、1.105.4 和 1.106.3,PyPI 上的最新版本現為 1.106.3。自這些版本起,用來簽署 Docker 映像檔與 Helm chart 的 cosign 金鑰已更換(見下方步驟 3)。

LiteLLM 使用者今天該做什麼

步驟 1 適用於所有人。之後的步驟依公司對「安裝或啟動過受影響版本或映像檔的環境」的指引。

1

確認是否受影響:安裝時間,以及你使用的標籤

公司列出以下受影響的套件。所有時間均為 2026 年 10 月 21 日。

管道受影響項目時段(UTC)
PyPIlitellm==1.107.0(全部七個 wheel)11:39 至 13:23
Docker Hubv1.107.0、latest、main-latest、main-stable11:46 至 14:20
GHCR(GitHub 的容器 registry)相同的四個標籤(litellm、litellm-database、litellm-non_root)11:46 起,至 13:51 前下架

公司表示,如果你在該時段內用 pip 安裝 LiteLLM 而未固定版本,或在該時段內由這些標籤啟動了容器,就屬於受影響。如果你的 CI 每次建置都執行 pip install litellm,或你的 Dockerfile 以 latest 標籤作為 FROM 來建置,即使沒有人做任何操作,也可能已安裝到受影響的版本。

  • 如果某個環境可能受影響,請不要為了查看版本而啟動 Python 或 pip。請先隔離它,再從另一台乾淨的機器檢視部署記錄或映像檔摘要值。如果無法排除曾暴露的可能,就視為受影響,並進行下方的重建與憑證輪換(本站註記)。公司的版本檢查指令同樣會啟動 Python,因此在清理之前請勿執行
  • 公司已公布要尋找的檔案名稱與映像檔摘要值。找到即可確認曾暴露,但找不到並不能證明環境是乾淨的
  • 如果你已明確固定使用 1.106.2 或更早版本,或 1.107.0rc1 或 rc2,則不受影響(公司表示較早的版本不在此次入侵範圍內)
  • 從私有企業版 registry 拉取的客戶未受影響(公司說明)
2

如果已安裝:不要在該環境中以 pip install 作為第一步

依公司公告所引用的通報者分析,該惡意程式以Python 每次啟動時都會自動載入的檔案形式安裝。任何 Python 行程都會再次執行它,包括從未 import litellm 的行程,以及 pip 本身。

公司給出的清理順序如下(檔案名稱與位置在其公告頁面):

  • 在不啟動 Python 的情況下,從 shell 刪除公司指名的惡意檔案(及其快取檔案),涵蓋每一個受影響的 site-packages 目錄
  • 停止在背景持續執行的 Python 行程
  • 之後才以固定的 litellm==1.106.2 重新安裝。公司表示從頭重建映像檔與虛擬環境會更好

如果是在容器中執行,最快的做法通常是停止由受影響映像檔建立的容器,並以固定在乾淨版本的映像檔重新建立(本站註記)。

3

固定版本,並以新的簽署金鑰驗證

公司在第一篇貼文中請使用者固定使用 1.106.2,或本次事件之前發布的任何明確版本。10 月 24 日(UTC),公司接著發布了 1.103.8、1.104.6、1.105.4 和 1.106.3。PyPI 上的最新版本是 1.106.3,1.107.0 仍已移除。依版本說明,這些版本從 SDK、proxy 和 Docker 映像檔所信任的每個憑證套件中移除了 eMudhra 根憑證機構。eMudhra 的問題請見Python 使用者針對 eMudhra 中繼 CA 金鑰需要做什麼。

在 Docker 中,請以版本標籤,或更好的是以摘要值(digest,由映像檔內容計算出的值)來引用映像檔,而不要使用 latest 或 main-stable 這類內容會變動的標籤。這樣標籤所指向的內容一有變動,就不會影響到你。

依版本說明,自 10 月 24 日的版本起,Docker 映像檔與 Helm chart 以新的 cosign 金鑰簽署(cosign 是簽署與驗證容器映像檔的工具),以舊金鑰驗證會失敗。如果你在 cosign verify 指令碼、CI 檢查或檢查簽章的 Kubernetes 政策(例如 Kyverno)中固定使用舊的 cosign.pub,請改用版本說明所指提交中的新金鑰。版本說明也列出了新金鑰的 SHA-256,因此在切換前,請將你下載的金鑰與之比對(本站註記)。

4

輪換金鑰:環境可存取的一切

公司表示,如果 1.107.0 曾安裝在可對外連網的主機上,你應假設被竊資料已成功外送。公司特別點名以下項目:

  • 附加在伺服器或容器上的雲端角色(例如 AWS 執行個體或任務的 IAM 角色)
  • 儲存在 LiteLLM proxy 資料庫中的每一把 LLM 供應商金鑰
  • proxy 主金鑰,以及你發出的所有虛擬金鑰
  • 資料庫連線字串(DATABASE_URL)中的密碼
  • 主機上任何執行中行程的環境裡的所有機密

在通報者的分析中,該惡意程式還被設計用來蒐集 SSH 金鑰、Git 與套件發布憑證、Kubernetes 權杖、瀏覽器中儲存的密碼,以及 AI 程式輔助工具的設定。如果你曾在開發者的筆記型電腦上執行 1.107.0,該電腦上的憑證也需要輪換。

請在各服務的管理介面核發新金鑰並撤銷舊金鑰(本站註記:先設定新金鑰,再撤銷舊金鑰,以避免服務中斷)。API 金鑰的處理方式請見.env 檔案與 API 金鑰為何有風險。

5

檢查是否遭濫用:雲端稽核記錄與 LLM 用量

公司請你在 AWS 稽核記錄(CloudTrail)中,檢查安裝前後是否有以執行個體角色發出的身分檢查呼叫(GetCallerIdentity),再檢查該角色的憑證是否曾從你自己的基礎設施以外的地方被使用。

本站另外建議,也請檢查你的 LLM 供應商管理介面,看自 2026 年 10 月 21 日 11:39 UTC(日本時間傍晚)以來,用量或費用是否有非預期的增加。被竊的 LLM 金鑰一旦被使用,可能會反映在用量與帳單上。被竊金鑰會造成什麼後果,請見被竊的 API 金鑰如何導致帳號遭停權。

在該時段內安裝了 1.107.0 或啟動了受影響的標籤

視為已遭入侵

↓

1. 在不啟動 Python 的情況下清理

更好:重建映像檔與虛擬環境

主機可對外連網

假設資料已外送

↓

2. 輪換其可存取的所有金鑰

雲端角色、供應商金鑰、主金鑰、資料庫

已明確固定使用 1.106.2 或更早版本

公司表示較早的版本不在此次入侵範圍內

↓

3. 維持固定版本;對新版本驗證簽章

在 Docker 中使用版本標籤或摘要值。10 月 24 日的版本起使用新的 cosign 金鑰

依 BerriAI 公告整理的各情況應採取的行動與順序。檔案名稱與摘要值請見公司的公告頁面。

如果你執行 LiteLLM proxy

proxy 資料庫中存放著你所連接的每一家 LLM 供應商的金鑰。依通報者的分析,在設定了 DATABASE_URL 的情況下,該惡意程式被設計用來讀取存放供應商金鑰與模型設定的資料表。如果你的 proxy 曾以 1.107.0 啟動,請準備輪換其中登錄的每一把供應商金鑰,並在開始之前先列出清單。你發給他人的虛擬金鑰也需要重新核發,事先準備好通知使用者的訊息可減少混亂。

發生了什麼事(依 BerriAI 說明)

以下內容依據 BerriAI 的部落格文章〈Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised〉(2026 年 10 月 21 日發布,當天 20:30 UTC 更新)、其 10 月 23 日的根本原因分析〈The attack chain behind the v1.107.0 LiteLLM release〉,以及其資安主管在 GitHub issue 上發布的狀態更新。除非另有說明,所有時間均為 10 月 21 日的 UTC 時間。攻擊者使用的位址與名稱等指標數值不在此重現。

  1. 5 月 27 日

    一份含有內部代理平台主金鑰的設定檔被誤提交到公開儲存庫。該提交很快被覆寫,但主金鑰並未撤銷(根本原因分析)。
  2. 10 月 10 日

    攻擊者用主金鑰呼叫該平台的 API,取得其中設定的組織擁有者的 GitHub CLI 權杖。約 45 分鐘後,攻擊者利用該權杖在公司的儲存庫中執行 CI 並竊取 CI 機密,取得另外兩位維護者的權杖(根本原因分析)。
  3. 10 月 12 日

    攻擊者利用擁有者的權杖在數個私有儲存庫中執行 CI,並第二次竊取機密:這些是 CI 測試所用、敏感度極低的機密與資金極少的 LLM 供應商金鑰。公司表示這些與被汙染套件的路徑無關,並已輪換相關權杖及稽核安全記錄(根本原因分析)。
  4. 10:08

    分支保護拒絕了對私有發布工作流程的一項變更。五秒後,一組綁定特權開發者帳號的憑證被用來繞過該保護並套用變更。
  5. 10:46

    被修改的工作流程啟動了一次由攻擊者控制的仿冒儲存庫建置的預備(staging)執行。
  6. 11:11

    攻擊者使用其他被竊的憑證,讓被修改的發布通過核准並被發布。
  7. 11:39 至 11:40

    七個惡意的 1.107.0 wheel 被上傳到 PyPI。
  8. 11:46

    同一版本的 Docker 映像檔被發布。
  9. 12:06

    一位外部研究人員在 GitHub issue 中通報了此問題。
  10. 12:09 至 12:24

    攻擊者清除了工作流程變更的痕跡(根本原因分析;組織稽核記錄保留了紀錄)。
  11. 13:02

    公司開始進行事件應變(根本原因分析)。
  12. 13:23 前

    PyPI 已移除 1.107.0。
  13. 14:20

    所有受影響的 Docker Hub 標籤都已移除,或改指向乾淨的映像檔。
  14. 20:30

    公司更新公告,表示相信已查明攻擊鏈。
  15. 23:37

    公司表示正在盤點整個組織的所有驗證權杖,並逐一撤銷或輪換。各 registry 維持鎖定、不接受新發布,例行發布仍暫停。
  16. 10 月 22 日 02:19(日本時間 11:19)

    公司表示自上次更新以來沒有重大進展。各 registry 維持鎖定,例行發布仍暫停。更新頻率由每兩小時一次改為有重大進展時才更新。
  17. 10 月 23 日約 21:00 至 21:50(日本時間 10 月 24 日約 06:00 至 06:50)

    約 21:00,公司發布根本原因分析,並表示先前的一些假設不正確或不完整。21:50(日本時間 06:50)對第一篇貼文的更新,指向該分析作為正式紀錄。
  18. 10 月 24 日約 07:56 至 09:15(日本時間約 16:56 至 18:15)

    公司將 1.103.8、1.104.6、1.105.4 和 1.106.3 發布到 PyPI。這些版本從受信任的套件中移除了 eMudhra 根憑證機構,且 Docker 映像檔與 Helm chart 改用新的 cosign 簽署金鑰(版本說明)。
約 2 小時
在 PyPI 上線的時間(11:39 至 13:23 UTC)
約 2.5 小時
Docker Hub 標籤指向惡意映像檔的時間
1.106.2
公司請使用者固定使用的版本
未受影響
私有企業版 registry(公司說明)
公告內容(依 BerriAI 說明)
受影響項目
PyPI 上的 litellm==1.107.0(全部七個 wheel)。Docker Hub 和 GHCR 上的 v1.107.0、latest、main-latest 和 main-stable 標籤(GHCR 上為 litellm、litellm-database 和 litellm-non_root 映像檔)
發生了什麼
發布流程遭入侵,一個含有惡意程式的 1.107.0 被發布。GitHub 上官方的 v1.107.0 標籤不含惡意檔案;這些套件是由攻擊者控制的仿冒儲存庫建置而成
惡意程式的行為(依已揭露內容)
已編譯的惡意程式,會竊取憑證並載入遠端程式碼執行工具。它在 Python 每次啟動時執行,並在背景留下一個持續執行的行程
不在此次入侵範圍內的版本
所有較早的版本都不在此次入侵範圍內。目前請固定使用 1.106.2 或其他明確指定的版本
原因(10 月 23 日根本原因分析)
一把被誤提交到公開儲存庫、且未撤銷的內部代理平台主金鑰,被用來取得某位組織擁有者的 GitHub CLI OAuth 權杖。該權杖未綁定服務帳號,也未縮減權限範圍。攻擊者以此竊取了 CI 機密,並取得兩位維護者的權杖。擁有者的權杖被用來停用分支保護並修改工作流程,其他被竊的權杖則被用來讓被修改的發布通過核准
發布核准(根本原因分析)
原本,發布必須由一個鎖定在公司辦公室實體裝置上的特殊帳號核准。當週稍早,為了支援更頻繁的錯誤修正發布,這項要求被放寬為任意兩位工程師即可觸發並核准發布
對最初說明的更正
第一篇貼文曾懷疑權杖來自內部 LiteLLM 部署的記錄檔。分析指出第一個權杖來自另一項服務
被取走的其他憑證
其他數個內部系統的權杖也被取走,攻擊者的活動主要集中在上游推論 API 金鑰(LLM 供應商金鑰)。10 月 12 日,從數個私有儲存庫中竊取了敏感度極低的 CI 測試機密與資金極少的供應商金鑰;公司表示這些與被汙染套件的路徑無關。公司正在撤銷所有內部系統與廠商平台的每一個權杖
公司的處置
已從 PyPI、Docker Hub 和 GHCR 移除相關套件。撤銷了相關權杖,將其 GitHub 組織縮減為一位未受影響的成員,移除公開 registry 對該組織的信任連結,並正在撤銷或輪換所有權杖。10 月 24 日(UTC),公司以新的簽署金鑰發布了 1.103.8、1.104.6、1.105.4 和 1.106.3
數量與濫用情形
未揭露

已知與未知

以下為截至 2026 年 10 月 24 日的狀況。後續若有進展,狀態欄將會更新。

項目公告內容狀態
受影響版本(PyPI)litellm==1.107.0,全部七個 wheel已確認(公司說明)
受影響的映像檔與標籤Docker Hub 和 GHCR 上的 v1.107.0、latest、main-latest、main-stable已確認(公司說明)
時間範圍PyPI 11:39 至 13:23 UTC;Docker Hub 11:46 至 14:20 UTC;GHCR 於 13:51 UTC 前下架已確認(公司說明)
發布版本中的惡意程式竊取憑證並載入遠端程式碼執行工具已確認(公司說明)
受影響主機上的憑證如果主機可對外連網,假設資料已外送可能(公司說明)
較早的版本不在此次入侵範圍內未受影響(公司說明)
私有企業版 registry未受影響未受影響(公司說明)
GitHub 上官方的原始碼標籤不含惡意檔案未受影響(公司說明)
權杖是如何被取走的一把被誤提交到公開儲存庫且未撤銷的主金鑰,被用來取走儲存在內部代理平台中的擁有者權杖(10 月 23 日根本原因分析)已確認(公司說明)
第一篇貼文中「從記錄檔取得」的說法分析中已更正:第一個權杖來自另一項服務已更正(公司說明)
10 月 12 日的第二次竊取來自私有儲存庫的 CI 測試機密與資金極少的供應商金鑰;與被汙染套件的路徑無關已確認(公司說明)
修正版本與簽署金鑰10 月 24 日發布 1.103.8、1.104.6、1.105.4 和 1.106.3;Docker 映像檔與 Helm chart 以新的 cosign 金鑰簽署已確認(公司說明)
防止再次發生的改進措施將於下週分享計畫中(公司說明)
受影響的使用者或環境數量公告中未說明未說明
被竊資料是否遭濫用公告中未說明未說明

如何解讀:即使時間很短,仍應以是否安裝或啟動過來判斷

該版本在 PyPI 上線約兩小時,但 CI 中未固定版本的安裝或自動重建,可能在這段時間內就取得它。本站不臆測數字。請以你是否在該時段內安裝了 1.107.0 或啟動了受影響的標籤來判斷自己是否受影響。

公司的公告與分析中,點名了發現問題的研究人員、獨立調查的一家資安公司,以及第一篇貼文中提到的開發者工具。依本站政策,只標示揭露此事件的組織名稱;其他方則以角色描述。

發布版本含有惡意程式時可能發生什麼

以下為一般性說明,並不表示這些情況在本案中發生。公司就這個惡意程式所揭露的內容,請見上方「發生了什麼事」。

Python 套件會以安裝者的權限執行。在伺服器或容器上,它可以存取該主機的環境變數、檔案,以及附加在其上的任何雲端角色。LLM 閘道的用途就是把多家 LLM 供應商的金鑰集中放在一處,因此一旦遭入侵,它所連接的每一家供應商的金鑰會同時面臨風險。

這與仿冒套件名稱(typosquatting)或利用舊版本漏洞的不同之處在於,惡意程式碼是以官方名稱和版本號碼、透過官方管道而來。同類事件包括 Trivy 供應鏈遭入侵、TanStack 與 Nx Console 事件,以及 WordPress 外掛 Rank Math PRO 中的惡意程式。

LiteLLM 使用者應檢討的事項:從已揭露事實得到的教訓

本節不評斷公司的處置。這裡從公告與根本原因分析中挑出使用者可以據以準備下一次事件的重點。

1

不要使用內容會變動的引用:固定版本並使用摘要值

受影響的環境,是以 pip 安裝而未固定版本,或使用 latest、main-latest、main-stable 等內容會變動的標籤的環境。固定使用 1.106.2、並以摘要值引用 Docker 映像檔的環境,即使在該時段內重建,也未受影響。

第一步,請以含雜湊值的鎖定檔固定正式環境與 CI 所用的相依套件(pip install --require-hashes,或 uv 或 Poetry 的鎖定檔)。採用避開剛發布不久版本的設定(例如 uv 的 exclude-newer,會忽略在指定時間之後發布的內容),也有助於防範數小時內就被撤下的版本。做法請見以 OSV-Scanner 稽核相依套件。

2

分開你提供給 LLM 閘道的金鑰,並預期自己會需要輪換

proxy 資料庫中存放著你所連接的每一家供應商的金鑰。像現在這樣必須輪換時,如果不知道哪把金鑰屬於哪個環境,你只能在可能漏掉一些,或全部停用之間做選擇。

開發、測試與正式環境使用各自獨立的供應商金鑰,並在供應商端設定花費上限與警示,可以縮小輪換範圍,也有助於更早發現濫用。金鑰外洩時的處理方式請見從 AI 撰寫的程式碼外洩的 API 金鑰。

3

即使已覆寫提交,也要撤銷你曾暴露的金鑰

依根本原因分析,起點是 5 月被誤提交到公開儲存庫的一把主金鑰。該提交很快被覆寫,已暴露的金鑰也被判定需要撤銷,但主金鑰並未撤銷,並在大約四個半月後被使用。公司表示,這起事件有力地說明了不輪換可能已暴露的金鑰所帶來的風險。

如果你把機密推送到公開儲存庫,請先撤銷並替換金鑰,再去處理歷史記錄。輪換之後,請檢查已替換金鑰的清單,確認沒有遺漏(本站註記)。此問題請見仍然有效的外洩憑證。

4

不要把擁有者的個人權杖交給自動化工具

依分析,第一個被取走的權杖,是為了讓代理平台能開啟 pull request 而設定在其中的。它未綁定服務帳號,也未縮減權限範圍:那是某位組織擁有者的個人 GitHub CLI 權杖。公司指出,GitHub CLI 權杖是在雙重驗證之後核發的,且不受 GitHub 在敏感操作前要求重新驗證的規定約束。

請為代理與機器人使用只限於其工作範圍的專用權杖(GitHub App 或細粒度權杖),並將擁有者權限與日常工作使用的帳號分開(本站註記)。讓 CI 機密只提供給需要它們的工作流程與環境,也能限制被竊權杖的影響範圍(本站註記)。保護 GitHub 帳號請見設定 GitHub 雙重驗證。

5

不要讓閘道的記錄檔與管理介面暴露在網際網路上

事後證明這並非原因,但公司的第一篇貼文曾指出,在特定情況下,AI 程式輔助工具可能把使用者的 GitHub CLI 權杖嵌入回應內容中,而在會記錄回應內容的地方,這些權杖可能出現在 LiteLLM 的記錄檔中。

對於自行執行的閘道,請檢查三件事:管理介面與 API 無法從網際網路直接連到、保留回應內容的記錄設定已經過檢視,以及若有保留,保存期限要短。保護 GitHub 帳號請見設定 GitHub 雙重驗證。

資料來源(公開紀錄)

本文中的事實來自以下公開資訊。惡意程式的內容、其連線的位址與具體的指標數值不在此重現。

  • BerriAI(LiteLLM),〈Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised〉(2026 年 10 月 21 日發布,當天 20:30 UTC 更新)— docs.litellm.ai
  • BerriAI(LiteLLM),〈The attack chain behind the v1.107.0 LiteLLM release〉(根本原因分析,2026 年 10 月 23 日發布)— docs.litellm.ai
  • BerriAI/litellm GitHub issue #47826(外部研究人員的通報與公司的狀態更新,查閱至 10 月 23 日 21:15 UTC 的更新)— github.com
  • litellm 的 PyPI 專案頁面(10 月 24 日 11:00 UTC 查閱;最新版本為 1.106.3,1.107.0 未列出)— pypi.org
  • BerriAI/litellm GitHub releases(2026 年 10 月 24 日發布的 v1.103.8、v1.104.6、v1.105.4 和 v1.106.3:簽署金鑰變更與移除 eMudhra 根 CA)— github.com

更新紀錄

2026-10-24(11:00 UTC):納入公司於 10 月 24 日(UTC)發布 1.103.8、1.104.6、1.105.4 和 1.106.3 的內容,取代 PyPI 最新版本仍為 1.106.2 的說法。在步驟 3 與常見問題中新增:這些版本的 Docker 映像檔與 Helm chart 以新金鑰簽署(舊金鑰已無法驗證),以及移除 eMudhra 根 CA。新增根本原因分析中 10 月 12 日的第二次竊取(依公司說明,與被汙染套件的路徑無關)。

2026-10-24:納入公司 10 月 23 日發布的根本原因分析。將權杖被取走的方式,從第一篇貼文的看法(內部 LiteLLM 部署的記錄檔),改寫為:一把被誤提交到公開儲存庫且從未撤銷的主金鑰,接著是儲存在內部代理平台中的擁有者權杖,再來是 CI 機密。更新了時間線、常見問題、表格與給使用者的章節。10 月 22 日與 23 日的報導描述的是最初的看法(權杖經由 AI 工具或閘道記錄檔外洩),公司此後已更正。使用者需要做的事沒有改變。不包含指標數值(IP 位址、名稱、提交)。

2026-10-22(13:30 JST):新增 10 月 22 日 02:19 UTC 的 GitHub 更新(沒有重大進展;之後僅在有重大進展時更新)。公告仍為 20:30 UTC 的版本。釐清了 GHCR 上哪些映像檔受影響,以及濫用檢查的措辭。

2026-10-22:第一版,依據 BerriAI 於 10 月 21 日 20:30 UTC 更新的公告,以及當天 23:37 UTC 的 GitHub 更新。入侵路徑或數字公布後將予以更新。

延伸閱讀

最新快訊

FAQ

Q哪些 LiteLLM 版本和映像檔受到影響?
A

依 BerriAI(LiteLLM)說明,受影響的套件是 PyPI 上的 litellm==1.107.0(全部七個 wheel,於 2026 年 10 月 21 日 11:39 至 13:23 UTC 期間上線),以及 Docker Hub 和 GHCR 上的 v1.107.0、latest、main-latest 和 main-stable 標籤。在 Docker Hub 上,這些標籤在 11:46 至 14:20 UTC 期間指向遭入侵的映像檔;在 GHCR 上,則於 13:51 UTC 前下架。公司表示較早的版本不在此次入侵範圍內,使用其私有企業版 registry 的客戶未受影響。

Q我要怎麼確認自己是否受到影響?
A

公司表示,如果你在該時段內用 pip 安裝了未固定版本的 LiteLLM,或在該時段內由受影響的標籤啟動了容器,就屬於受影響。公司請你把任何以 litellm==1.107.0 啟動過 Python 的環境視為已遭入侵。如果某個環境可能受影響,請不要為了檢查而啟動 Python 或 pip:請先將它隔離。再從另一台乾淨的機器檢視部署記錄或映像檔摘要值(digest)。如果無法排除曾暴露的可能,就視為受影響(本站註記)。公司已公布要尋找的檔案名稱,但表示找不到並不能證明環境是乾淨的。

Q即使我的程式碼從未 import litellm,也有風險嗎?
A

有。依公司公告所引用的通報者分析,該惡意程式以檔案形式安裝,Python 每次啟動時都會自動載入這些檔案,因此即使 Python 行程從未使用 litellm,甚至執行 pip 本身時,它也會執行。這就是公司規定清理順序,並警告不要在受影響的環境中以 pip install 作為第一步的原因。

Q我應該輪換哪些憑證?
A

公司的指引是:主機可存取的一切。特別是:附加在執行個體或任務上的雲端角色(例如 AWS IAM 角色)、儲存在 LiteLLM proxy 資料庫中的每一把 LLM 供應商金鑰、proxy 主金鑰與所有虛擬金鑰、DATABASE_URL 的密碼,以及主機上任何行程環境中的所有機密。如果 1.107.0 曾安裝在可對外連網的主機上,公司請你假設資料已成功外送。

Q起因是什麼?
A

依公司 10 月 23 日發布的根本原因分析,5 月 27 日有一份設定檔被誤提交到公開儲存庫,其中含有內部代理平台(公司使用的一項開源工具)的主金鑰。該提交很快被覆寫,但主金鑰並未撤銷。10 月 10 日,攻擊者用該金鑰呼叫平台 API,取得其中設定的某位 GitHub 組織擁有者的 GitHub CLI OAuth 權杖。攻擊者以該權杖竊取了儲存在 CI 中的機密,並取得另外兩位維護者的權杖,接著在 10 月 21 日停用分支保護、修改發布工作流程,並通過正式發布的核准。公司第一篇貼文曾懷疑權杖是從內部 LiteLLM 部署的記錄檔中被取走;分析更正了這一點,指出第一個權杖來自另一項服務。

Q自 10 月 24 日起,驗證 LiteLLM 的 Docker 映像檔簽章會失敗。為什麼?
A

依公司的版本說明,自 10 月 24 日(UTC)發布的 1.103.8、1.104.6、1.105.4 和 1.106.3 起,Docker 映像檔與 Helm chart 改用新的 cosign 金鑰簽署,以舊金鑰驗證會失敗。如果你在 cosign verify 指令碼、CI 檢查或檢查簽章的 Kubernetes 政策中固定使用舊的 cosign.pub,請改用版本說明所指提交中的新金鑰。金鑰位置與驗證指令都寫在各版本的版本說明中。

QLiteLLM 在 3 月也曾遭入侵。這是同一起事件嗎?
A

不是。公司在這份公告中表示,3 月的事件之後,它強化了發布流程(將發布移到私有儲存庫、使用 trusted publishing、讓 Docker 發布標籤不可變更,以及為映像檔簽章),而這次攻擊者必須使用合法憑證突破其中數項控制。3 月受影響的版本與 1.107.0 不同。