// 威脅簡報
Trivy 供應鏈攻擊:資安掃描工具被植入竊密程式,一路擴散到 LiteLLM 與 Checkmarx
- CVSS
- 8.8 HIGH
- CISA KEV
- 2026-03-26
- 弱點類型
- CWE-506
人工審稿 2026-09-23指令測試:未提供漏洞重現:未進行驗證紀錄 ↓
攻擊者取得 Trivy 的發布權限後,讓官方版本與 GitHub Action 夾帶竊密程式;用它掃描的 CI 流程金鑰被偷,再被拿去污染 LiteLLM 等其他專案。
| 誰會中 | 2026-03-19 至 03-23 期間(各元件時段不同,見下表)在 CI 或本機使用 Trivy v0.69.4 / 0.69.5 / 0.69.6、以版本標籤引用 aquasecurity/trivy-action 或 setup-trivy 的人;以及 03-24 安裝 litellm 1.82.7 / 1.82.8 的人。 |
|---|---|
| 後果 | CI 環境裡能碰到的祕密(雲端金鑰、GitHub token、SSH 金鑰、套件發布 token、Kubernetes 憑證)可能都已外洩,攻擊者能以你的身分發布程式或進入雲端。 |
| 現在該做什麼 | 換到乾淨版本,把受影響流程能存取的所有祕密視為外洩並輪替;GitHub Actions 改用完整 commit SHA 引用。查看依據(4)
|
| 受影響版本 | trivy v0.69.4(所有管道)、0.69.5 / 0.69.6(僅 Docker Hub);trivy-action 0.0.1–0.34.2 標籤;setup-trivy v0.2.0–v0.2.6 標籤;litellm 1.82.7 / 1.82.8查看依據(4)
|
| 修好的版本 | trivy v0.69.3 以前或之後的乾淨版本;trivy-action 0.35.0;setup-trivy v0.2.6(重建版);litellm 1.83.0查看依據(3)
|
| CVSS 向量 | 顯示完整向量CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 時間點 | |
| CISA KEV | 已列入(2026-03-26),代表已有實際攻擊案例查看依據(4)
|
藍隊應對手冊
確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。
- 01回看 CI 執行紀錄,找陌生 repo
回看 03-19 到 03-20 的 workflow 執行紀錄;檢查 GitHub 組織裡有沒有出現名為 tpcp-docs 的陌生 repo。CI、本機、litellm 主機是三條分開的檢查路徑,做完其中一條不代表可以跳過其他條。
- 02確認 trivy-action 的引用方式
以版本標籤引用 trivy-action 或 setup-trivy 的流程都在受影響範圍。用 SHA 固定仍可能中招的兩種情況(Aqua 公告):在曝光期間明確設定 version: latest,Action 本身安全,但會下載惡意的 Trivy 0.69.4;或固定到 2025-04-09 以前的 commit,那時 trivy-action 以標籤呼叫 setup-trivy,而 setup-trivy 的標籤在 3/19 全被換成惡意版本。
- 03檢查在本機執行過惡意 Trivy 的電腦
Aqua 建議:在 CI 以外執行過惡意 Trivy 的電腦,檢查有沒有 ~/.config/systemd/user/sysmon.py,以及同一個資料夾裡相關的 systemd 使用者服務設定檔。
- 04確認曾經安裝的 litellm 版本
1.82.8 會留下 litellm_init.pth,但 1.82.7 沒有這個檔案,找不到 .pth 不代表沒事。請看 lockfile、CI 與 Docker build 紀錄,或直接列出 site-packages 資料夾。
- 01把 Trivy 與相關 Action 換到乾淨版本
移除 Trivy v0.69.4 / 0.69.5 / 0.69.6。乾淨版本:trivy v0.69.2、v0.69.3;trivy-action 0.35.0;setup-trivy v0.2.6(重建版)。Checkmarx KICS Action 的確切版本請以 Checkmarx 官方頁面為準。
- 02把 litellm 換到乾淨版本
移除 litellm 1.82.7 / 1.82.8,改用 1.82.6 以前或 1.83.0。LiteLLM 官方 Docker 映像檔的使用者不受影響。
- 01輪替受影響流程能存取的所有祕密
Aqua 建議:所有祕密都視為外洩,包括雲端金鑰、GitHub token、SSH 金鑰、套件發布 token、資料庫與 Kubernetes 憑證。輪替要一次全部完成,不要分批。
- 02移除常駐檔案
Aqua 建議:找到 ~/.config/systemd/user/sysmon.py 與相關的 systemd 使用者服務設定檔就立刻移除;安裝過 litellm 1.82.8 的主機,找到 litellm_init.pth 也要移除。
- 03檢查 Python 環境時只讀檔,不執行 python 或 pip
只用 find、ls、grep 這類讀檔方式檢查可能受感染的環境。Python 一啟動就會執行 .pth 檔,等於再觸發一次惡意程式。
- 01GitHub Actions 用完整 commit SHA 引用,工具版本也要固定
PlainCVE 建議:除了固定 Action 本身,也確認它下載的工具版本是固定的(trivy-action 的 version 不要設成 latest);啟用不可變的發布(immutable releases)。
- 02驗證簽章並限制 CI 對外連線
PlainCVE 建議:用 cosign / sigstore 驗證 Trivy 二進位檔與映像檔簽章;限制 CI 對外連線;CI 權限最小化。
- 03套件發布改用 OIDC Trusted Publishing
PlainCVE 建議不在 CI 放長效 token。信任範圍不要開太大:npm 文件建議搭配需要人工核准的部署環境(deployment environment),並用標籤保護規則限制誰能建立發布標籤。
- 04鎖定相依版本,新版本延遲採用
PlainCVE 建議:用 lockfile + hash 鎖定相依版本,不要一發布就安裝新版本。
完整修復步驟與說明
- 換到乾淨版本。 依上表確認每個元件,移除 Trivy v0.69.4 / 0.69.5 / 0.69.6 與 litellm 1.82.7 / 1.82.8。
- 輪替祕密。 Aqua 建議:受影響流程能存取的所有祕密都視為外洩,包括雲端金鑰、GitHub token、SSH 金鑰、套件發布 token、資料庫與 Kubernetes 憑證。
- 檢查痕跡。 以下是三條分開的檢查路徑,做完其中一條不代表可以跳過其他條:
- CI: 回看 03-19 到 03-20 的 workflow 執行紀錄;檢查 GitHub 組織裡有沒有出現名為
tpcp-docs的陌生 repo。 - 在本機(CI 以外)執行過惡意 Trivy 的電腦: Aqua 建議檢查有沒有
~/.config/systemd/user/sysmon.py,以及同一個資料夾裡相關的 systemd 使用者服務設定檔,找到就立刻移除。 - 安裝過惡意 litellm 的主機: 1.82.8 會留下
litellm_init.pth,找到就移除;但 1.82.7 沒有這個檔案,找不到.pth不代表沒事。請看 lockfile、CI 與 Docker build 紀錄,或直接列出 site-packages 資料夾,確認曾經安裝的 litellm 版本。 - 檢查可能受感染的 Python 環境時,只用讀檔的方式(例如
find、ls、grep),不要執行python或pip:Python 一啟動就會執行.pth檔,等於再觸發一次惡意程式。
- CI: 回看 03-19 到 03-20 的 workflow 執行紀錄;檢查 GitHub 組織裡有沒有出現名為
- 長期強化。
- GitHub Actions 一律用完整 commit SHA 引用,並確認 Action 下載的工具版本也是固定的(例如 trivy-action 的
version不要設成latest)。 - 用 cosign / sigstore 驗證 Trivy 二進位檔與映像檔簽章。
- 套件發布改用 OIDC Trusted Publishing,不在 CI 放長效 token。但信任範圍不要開太大:npm 文件建議搭配需要人工核准的部署環境(deployment environment),並用標籤保護規則限制誰能建立發布標籤。
- 憑證輪替要一次全部完成,不要分批。
- GitHub Actions 一律用完整 commit SHA 引用,並確認 Action 下載的工具版本也是固定的(例如 trivy-action 的
攻擊流程
從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
- 攻擊者
利用 Trivy 的 GitHub Actions 設定錯誤取得高權限 token
2026 年 2 月底。3 月 1 日專案輪替了憑證,但不是一次全部換掉,攻擊者可能因此保住存取權。
防禦: 憑證輪替要一次到位;CI 權限最小化。
- 攻擊者
把既有版本標籤改指向惡意程式,並發布 v0.69.4
用標籤引用 trivy-action 的人,下一次執行就自動跑到惡意版本;官方發布流程也照常把 v0.69.4 送上所有下載管道。
防禦: GitHub Actions 以完整 commit SHA 引用,而且 Action 會下載的工具版本也要固定(trivy-action 的 version 不要設成 latest);啟用不可變的發布(immutable releases)。
- 你的系統
受害者的 CI 執行「資安掃描」
惡意程式在真正掃描前,先從 runner 記憶體與 50 多個檔案位置蒐集祕密,加密後傳出。
防禦: 用 cosign / sigstore 驗證二進位檔與映像檔簽章;限制 CI 對外連線。
- 攻擊者
拿偷到的發布 token 污染下一個專案
LiteLLM 的 CI 用 Trivy 做掃描,PyPI token 因此外洩,攻擊者直接上傳了 litellm 1.82.7 / 1.82.8。Checkmarx 表示其 KICS GitHub Action 也是用這次攻擊取得的憑證被竄改。
防禦: 套件發布改用 OIDC Trusted Publishing,不在 CI 放長效 token,並限定只能從需要人工核准的部署環境發布。
- 你的系統
安裝新版 litellm 的人也被竊密
兩個版本觸發方式不同:1.82.7 在載入 LiteLLM 的 proxy 伺服器模組(proxy_server)時執行;1.82.8 除此之外還多放了一個 .pth 檔,任何 Python 程式一啟動就會執行。惡意程式會竊取金鑰並在主機上常駐。
防禦: 鎖定相依版本(lockfile + hash);新版本延遲採用。
影響範圍
| 元件 | 受影響 | 暴露時間(UTC) | 乾淨版本 |
|---|---|---|---|
| trivy 二進位檔與映像檔(所有管道) | v0.69.4 | 03-19 18:22 – 約 21:42 | v0.69.2、v0.69.3 |
| trivy Docker Hub 映像檔 | 0.69.5、0.69.6 | 03-22 15:43 – 03-23 約 01:40 | 0.69.3 |
| aquasecurity/trivy-action | 0.0.1–0.34.2 共 76 個標籤 | 03-19 約 17:43 – 03-20 約 05:40 | 0.35.0 |
| aquasecurity/setup-trivy | v0.2.0–v0.2.6 全部標籤 | 03-19 約 17:43 – 約 21:44 | v0.2.6(重建版) |
| PyPI litellm | 1.82.7、1.82.8 | 03-24 10:39 起約 40 分鐘 | 1.82.6 以前、1.83.0 |
Aqua 表示不受影響的情況: Trivy v0.69.3 以前、以 digest 引用映像檔、從原始碼自行編譯、官方 Homebrew(brew install trivy)、以 2025-04-09 之後的 commit SHA 引用 trivy-action。LiteLLM 官方 Docker 映像檔的使用者也不受影響。
用 SHA 固定 trivy-action 仍可能中招的兩種情況(Aqua 公告):一是在曝光期間明確設定 version: latest,Action 本身安全,但會下載惡意的 Trivy 0.69.4;二是固定到 2025-04-09 以前的 commit,那時 trivy-action 以標籤呼叫 setup-trivy,而 setup-trivy 的標籤在 3/19 全被換成惡意版本。所以除了固定 Action 本身,也要確認它下載的 Trivy 版本是固定的。
Checkmarx 的 KICS GitHub Action 與部分 IDE 擴充套件在 03-23 也遭竄改,但沒有獨立的 CVE,確切版本請以 Checkmarx 官方頁面為準。
原理
這不是某一行程式寫錯,而是信任鏈被接管。軟體供應鏈裡有兩個常被忽略的假設:
- 「版本標籤不會變。」 很多人在 GitHub Actions 裡寫
uses: aquasecurity/trivy-action@0.34.0。但 Git 標籤其實可以被移動。攻擊者取得權限後,把既有標籤改指向惡意 commit,所有用標籤引用的流程,下一次執行就自動跑到惡意版本,沒有任何人改過設定檔。 - 「官方發布流程出來的就是安全的。」 攻擊者推了一個 v0.69.4 標籤,Trivy 自己的 CI 就照常把它建置、發布到 GitHub、Docker Hub、套件庫等所有管道。
而 Trivy 是資安掃描工具:它本來就被放在 CI 裡、擁有讀取程式碼與環境的權限。惡意版本利用這點,在掃描前先蒐集 runner 上的祕密並外傳。
最後一環是擴散:LiteLLM 的 CI 用 Trivy 做掃描,PyPI 發布 token 因此外洩,攻擊者用它上傳了惡意的 litellm。這就是供應鏈攻擊「一傳十」的樣子。
有問題的寫法:
展開程式碼範例(yaml)
# 標籤可以被移動,指向的程式可能在你不知情時改變
- uses: aquasecurity/trivy-action@0.34.0修好的寫法:
展開程式碼範例(yaml)
# 用完整 commit SHA 引用,內容不可能被替換;註解標出對應版本方便維護
- uses: aquasecurity/trivy-action@<完整 40 字元 commit SHA> # v0.35.0時間軸
| 日期(UTC) | 事件 |
|---|---|
| 2026-02 下旬 | 攻擊者利用 Trivy GitHub Actions 設定錯誤取得高權限 token |
| 2026-03-01 | 第一次事件揭露,憑證輪替但未一次完成 |
| 2026-03-19 | trivy-action / setup-trivy 標籤遭竄改,v0.69.4 發布 |
| 2026-03-21 | Aqua 發布 GitHub 安全公告 |
| 2026-03-22 | Docker Hub 出現惡意 0.69.5 / 0.69.6 |
| 2026-03-23 | Checkmarx KICS Action 遭竄改;CVE 公開 |
| 2026-03-24 | 惡意 litellm 1.82.7 / 1.82.8 在 PyPI 上約 40 分鐘後被隔離 |
| 2026-03-26 | CISA 列入已知遭利用漏洞清單 |
延伸閱讀
- 評分差異:GitHub(CNA)的 CVSS 4.0 為 9.4,NVD 的 CVSS 3.1 為 8.8。
- CVE 紀錄也列出 telnyx 4.87.1 / 4.87.2,但 Telnyx 自己的公告只說 PyPI token 被盜,沒有提到 Trivy。
- 攻擊者被稱為「TeamPCP」。Aqua 與 Checkmarx 的公告後來也使用這個名稱;但 Aqua 提醒,這主要來自惡意程式自稱「TeamPCP Cloud stealer」,自稱可能是故意栽贓,只是技術特徵與這個組織過去的工具相符,所以歸因「有可能」成立,不是定論。
- 相關弱點類型:CWE-506 內嵌惡意程式碼;延伸閱讀 SLSA 框架與 OpenSSF Scorecard。
驗證紀錄 已人工審稿、核對來源;尚未在我們的環境重現
| 人工審稿 | 2026-09-23 |
|---|
驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.
來源
- 安全公告GHSA-69fq-xp46-6x23 — Trivy ecosystem supply chain briefly compromised · Aqua Security(GitHub), 2026-03-21 · 查閱 2026-09-23
- CVE / NVD / OSVCVE-2026-33634 Record · CVE Program, 2026-03-23 · 查閱 2026-09-23CNA(GitHub)CVSS 4.0 為 9.4;NVD CVSS 3.1 為 8.8。
- CVE / NVD / OSVNVD - CVE-2026-33634 · NIST · 查閱 2026-09-23
- 安全公告CISA Adds One Known Exploited Vulnerability to Catalog · CISA, 2026-03-26 · 查閱 2026-09-23
- 廠商說明Trivy supply chain attack: what you need to know · Aqua Security · 查閱 2026-09-23
- 安全公告PYSEC-2026-2(litellm) · PyPA / OSV, 2026-03-24 · 查閱 2026-09-23
- 廠商說明LiteLLM security update, March 2026 · BerriAI, 2026-03-24 · 查閱 2026-09-23
- 廠商說明Checkmarx ongoing security updates · Checkmarx · 查閱 2026-09-23
- 研究文章Detecting, investigating, and defending against the Trivy supply chain compromise · Microsoft Security Blog, 2026-03-24 · 查閱 2026-09-23
- 廠商說明Trusted publishing for npm packages · npm Docs · 查閱 2026-09-24
媒體簡報
一句話
2026 年 3 月,廣泛使用的開源資安掃描工具 Trivy 遭入侵,官方版本被植入竊取密碼與金鑰的程式。使用它掃描程式的開發團隊,金鑰被偷後又被拿去污染其他熱門套件,包括 AI 閘道 LiteLLM。美國 CISA 於 3 月 26 日將此事件列入已知遭利用漏洞清單。
可引用的一句話
攻擊者沒有去攻破每一家公司,而是攻破大家都信任、都會自動執行的那個工具,再讓它替自己去拿鑰匙。
圖片
引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.
Trivy 供應鏈攻擊:資安掃描工具被植入竊密程式,一路擴散到 LiteLLM 與 Checkmarx 2026 年 3 月,廣泛使用的開源資安掃描工具 Trivy 遭入侵,官方版本被植入竊取密碼與金鑰的程式。使用它掃描程式的開發團隊,金鑰被偷後又被拿去污染其他熱門套件,包括 AI 閘道 LiteLLM。美國 CISA 於 3 月 26 日將此事件列入已知遭利用漏洞清單。 「攻擊者沒有去攻破每一家公司,而是攻破大家都信任、都會自動執行的那個工具,再讓它替自己去拿鑰匙。」— PlainCVE https://plaincve.date/vulns/cve-2026-33634-trivy-supply-chain
如何引用本頁
本文採 CC BY 4.0,轉載請保留署名與連結。
PlainCVE 團隊(2026)。《Trivy 供應鏈攻擊:資安掃描工具被植入竊密程式,一路擴散到 LiteLLM 與 Checkmarx》。PlainCVE。https://plaincve.date/vulns/cve-2026-33634-trivy-supply-chain(查閱日期:YYYY-MM-DD)BibTeX
@misc{cve202633634trivysupplychain2026,
title = {Trivy 供應鏈攻擊:資安掃描工具被植入竊密程式,一路擴散到 LiteLLM 與 Checkmarx},
author = {PlainCVE 團隊},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/vulns/cve-2026-33634-trivy-supply-chain},
note = {更新於 2026-09-24}
}