LiteLLM 供應鏈攻擊:2026年惡意程式碼注入事件完整分析與緊急應對指南

重點摘要
- 受影響版本:PyPI 上的 LiteLLM 1.82.7 和 1.82.8 版本被注入了惡意程式碼,現已下架。最後一個安全版本是 1.82.6。
- 攻擊機制:版本 1.82.7 將惡意載荷隱藏在
proxy_server.py中;版本 1.82.8 則額外使用了一個 Python.pth檔案 (litellm_init.pth),該檔案會在 任何 Python 程序啟動時 自動執行,無需導入 LiteLLM。 - 竊取的資料:SSH 私鑰、AWS/GCP/Azure 憑證、Kubernetes 配置與 Secrets、
.env檔案、加密貨幣錢包、資料庫密碼、Git 憑證、Shell 歷史記錄等。 - 三段式攻擊:憑證竊取 → Kubernetes 橫向移動(創建特權 Pod)→ 透過偽裝的 systemd 服務 (
sysmon.service) 維持持續性存取。 - 根本原因:攻擊者先前已入侵 Trivy 安全掃描器,獲得 LiteLLM 維護者的 PyPI 發布權限,並繞過正常的 CI/CD 流程直接上傳惡意套件包。
- 暴露窗口:惡意版本上線僅 1–2 小時,但因一個 fork 炸彈缺陷導致開發人員電腦崩潰,從而使其被發現。
- 影響範圍:LiteLLM 每月下載量超過 9500 萬次,並被許多 AI 代理系統、MCP 伺服器和 LLM 編排專案間接依賴。
時間線與攻擊詳情
2026年3月24日,熱門函式庫 LiteLLM —— 一個統一涵蓋超過 100 個 LLM 提供者的 API 封裝包 —— 在 PyPI 上突然出現了異常版本。威脅攻擊團隊 TeamPCP(先前曾對 Trivy 和 KICS 發動攻擊)利用被入侵的維護者憑證或 PyPI 令牌發布了兩個惡意版本。
版本 1.82.7:
- 惡意載荷隱藏在
litellm/proxy/proxy_server.py中。 - 僅在導入模組或執行
litellm --proxy時觸發。 - 載荷為雙重 base64 編碼的 Python 腳本。
版本 1.82.8(更具破壞性):
- 額外植入
litellm_init.pth檔案。 - Python 的
site模組會在解譯器啟動時自動執行.pth檔案,實現 零交互觸發。 - 這意味著即使專案從未明確使用 LiteLLM,只要該套件存在於其環境中,就可能被感染。
該惡意軟體使用混合加密(AES-256-CBC + RSA-4096)將資料外洩至偽造的域名 models.litellm.cloud。
惡意負載技術分析
分析顯示該惡意負載分為三個獨立階段運作:
-
憑證竊取階段:
- 遞迴掃描常見路徑:
~/.ssh/、~/.aws/、~/.kube/、~/.azure/、.env檔案、Kubernetes 配置、Git 憑證等。 - 提取環境變數、記憶體中的密鑰、雲端元資料端點(IMDS)以及多種加密貨幣錢包檔案。
- 遞迴掃描常見路徑:
-
橫向移動階段(Kubernetes 環境):
- 使用 ServiceAccount 權杖讀取叢集範圍的 Secrets。
- 在每個節點的
kube-system命名空間中創建特權alpine:latestPod,並掛載主機檔案系統。
-
持久化階段:
- 部署偽裝成「系統遙測服務」的後門(
sysmon.py+ systemd 使用者服務)。 - 定期從
checkmarx.zone等域名拉取額外負載。
- 部署偽裝成「系統遙測服務」的後門(
發現觸發條件:惡意程式碼的 subprocess.Popen 呼叫在 .pth 機制下創建了指數級的分支炸彈(fork bomb),迅速耗盡記憶體並導致機器崩潰——這一缺陷無意中暴露了攻擊行為。
為何 LiteLLM 成為高價值目標
LiteLLM 作為支援 100 多個 LLM 提供者的通用代理,被廣泛應用於生產環境的 AI 代理系統、MCP 伺服器及多模型路由中。開發者通常只需一行程式碼即可替換底層呼叫,這意味著敏感的 API 金鑰經常共存於同一環境中。
此次供應鏈攻擊鏈條清晰:Trivy 遭入侵 → LiteLLM CI/CD 依賴 Trivy → 發布權限洩漏 → 直接惡意上傳至 PyPI。這凸顯了在當今開源生態系統中「信任但仍需驗證」的極端重要性。
緊急行動:檢測與清理步驟
步驟 1:檢查已安裝版本
pip show litellm
pip list | grep litellm
若發現版本為 1.82.7 或 1.82.8,請立即移除:
pip uninstall litellm -y
pip install litellm==1.82.6 --force-reinstall
步驟 2:清理 Python 快取與 site-packages
- 刪除
site-packages/litellm*目錄及任何.pth檔案。 - 清除 pip 快取:
pip cache purge
步驟 3:輪換所有憑證
- 立即 輪換 SSH 金鑰、所有雲端存取金鑰(AWS IAM、GCP 服務帳戶、Azure AD)、Kubernetes 權杖、資料庫密碼及 CI/CD 密鑰。
- 檢閱雲端稽核日誌(CloudTrail、Audit Log、Activity Log)以查找可疑存取記錄。
步驟 4:Kubernetes 環境額外檢查
- 掃描
kube-system命名空間以尋找可疑 Pod。 - 檢查節點上是否存在
~/.config/sysmon/目錄及異常的 systemd 服務。 - 重建受影響節點(強烈建議)。
步驟 5:掃描依賴專案
- 稽核所有
requirements.txt、pyproject.toml及 Docker 映像檔;將 LiteLLM 固定為==1.82.6。 - 使用
pip-audit或safety等工具掃描環境。
進階緩解措施與最佳實踐
- 固定版本:在生產環境中始終使用Poetry、Pipenv或類似工具將LiteLLM鎖定為
==1.82.6(或更新的安全版本)。 - 供應鏈掃描:整合Dependabot、Snyk、JFrog Xray或Endor Labs以監控PyPI套件的變更。
- 最小權限原則:避免混合開發與生產環境的憑證;使用專用的密碼管理工具(如AWS Secrets Manager、HashiCorp Vault)。
- 隔離安裝:針對高安全性環境,應從驗證過的GitHub原始碼建構並檢查雜湊值。
- 監控機制:部署終端偵測與回應(EDR)解決方案,監控
.pth檔案的建立、異常的fork行為以及對可疑網域的連出連線。
特殊案例:
- 透過CLI腳本(如
install.sh)間接安裝同樣會使系統暴露於風險。 - 基於受污染基礎映像的Docker映像必須重新建構。
- 虛擬環境(venv)雖然隔離,但全域Python安裝仍可能影響系統程序。
結論
LiteLLM供應鏈攻擊清楚地提醒我們:開源生態系統的便利性伴隨著嚴重的安全風險。透過先入侵安全掃描工具,攻擊者實現了精準的下游影響。
立即行動:檢查所有Python環境中的LiteLLM版本,降級至1.82.6,並立即輪換所有可能暴露的憑證。建立嚴格的相依性審查流程以防止未來事件。
請透過官方LiteLLM GitHub與PyPI公告持續更新。2026年及往後,定期稽核相依性將成為每位AI開發者必備的核心能力。
保持警覺,保護供應鏈——從今天開始固定版本做起。