適用對象:在 CI(例如 GitHub Actions)中執行 Trivy(容器映像與相依套件弱點掃描工具)、aquasecurity/trivy-action 或 aquasecurity/setup-trivy 的人,以及在工作站或伺服器上使用 Trivy 二進位檔或容器映像的人。
本文依據 Aqua Security 的官方揭露與 Trivy 安全公告撰寫,不涵蓋攻擊技術或入侵指標(IoC)數值。
CI 使用者今天該做什麼
檢查受影響時段內是否有任何 Trivy 相關工作流程執行
Aqua 要求使用者檢視 2026 年 3 月 19–20 日的工作流程執行紀錄。公告中的時段(UTC)如下:
- trivy-action:3 月 19 日約 17:43 至 3 月 20 日約 05:40
- setup-trivy:3 月 19 日約 17:43 至約 21:44
- Trivy v0.69.4:3 月 19 日 18:22 至約 21:42
- Docker Hub 映像 v0.69.5 與 v0.69.6:3 月 22 日 15:43 至 3 月 23 日約 01:40
若你的組織有大量工作流程,請搜尋引用 aquasecurity/trivy-action 與 aquasecurity/setup-trivy 的工作流程,並依上述時段篩選其執行紀錄。
依引用方式判斷,而不只看版本
在公告中,重要的是你如何引用該元件。
- trivy-action — 受影響:0.35.0 以外的任何標籤(0.0.1–0.34.2);在時段內明確設定
version: latest;以 SHA 釘選到 2025 年 4 月 9 日之前的 commit。不受影響:0.35.0 標籤;2025 年 4 月 9 日之後指向安全 commit 的 SHA 釘選。 - setup-trivy — 受影響:任何未以 SHA 釘選的使用方式。不受影響:指向安全 commit 的 SHA 釘選。
- Trivy 本身 — 受影響:v0.69.4(包括時段內的
latest;GitHub、deb、rpm、get.trivy.dev、GHCR、ECR Public、Docker Hub),以及 Docker Hub 上的 v0.69.5 與 v0.69.6。不受影響:v0.69.3 及更早版本;以 digest 引用的映像;從原始碼建置的版本;官方 Homebrew formula。
若受影響,請輪替該工作可讀取的每一個機密
Aqua 表示,若有任何可能性是受入侵版本已執行,受影響管線可存取的所有機密都必須視為已外洩:雲端憑證(AWS、GCP、Azure)、Git 憑證、容器登錄檔憑證、SSH 金鑰、Kubernetes 權杖,以及環境變數與其他自動化機密。
該公司要求將 npm 發佈權杖視為正遭積極入侵,並指出遭竊的權杖正被用來在 npm 上散播惡意程式。對於自架 runner,Aqua 另列出儲存在 runner 上的資料庫憑證、TLS 私密金鑰與 VPN 設定。
先作廢所有舊金鑰,再一併核發新金鑰
此步驟源自 Trivy 自身的根本原因。根據 Aqua 的說法,3 月 1 日的輪替並非一次完成,而在歷時數天的輪替期間,攻擊者可能利用仍有效的權杖,連新核發的機密也一併取得。
在列出範圍內的機密後,先一併作廢舊金鑰,然後再核發新金鑰。逐一輪替金鑰,會讓仍有效的舊金鑰有機會讀取新金鑰。請預期會有短暫停機作為代價。
依照公告的檢查清單,檢查你的 GitHub 組織以及任何執行過 Trivy 的機器
Aqua 列出需要檢查的項目:若使用了備用外洩路徑,你的 GitHub 組織中可能會出現一個新建立的儲存庫;此外,在 CI 之外(例如開發者的工作站)執行過 v0.69.4 的機器上可能留有檔案。若你可能受到影響,請依照 Aqua 揭露文件與下方連結的公告中的檢查清單進行(本文不重述指標數值)。
改用已知安全的版本
Aqua 列出的安全版本為Trivy v0.69.2 與 v0.69.3、trivy-action v0.35.0,以及 setup-trivy v0.2.6。根據公告,舊的 trivy-action 標籤(0.0.1–0.34.2)已被刪除,無法以相同名稱重新建立,因此改以 v 前綴重新發布(例如 v0.34.0),並指向原本合法的 commit(部分尚未還原)。若你仍引用較舊的版本,請更新該引用。
檢視你的 CI 設定時該注意什麼
以 commit SHA 釘選 Action 的基本原則,已在TanStack、Nx Console 與 GitHub 的事件鏈中說明。這裡則聚焦於 Trivy 事件額外帶來的教訓。
檢查以 SHA 釘選的 Action 內部以標籤呼叫了什麼
根據公告,trivy-action 於 2025 年 4 月 9 日合併的一個 pull request 中,將其內部元件引用改為 SHA 釘選。先前將 trivy-action 釘選到較早 commit 的人,所使用的安全 trivy-action 會以標籤呼叫惡意的 setup-trivy。
若你使用由其他 Action 組成的 Action(複合式 Action),請開啟你所釘選 commit 中的 action.yml,並檢查其中的 uses: 行是否以 SHA 釘選。若沒有,請改用較新的 commit,或由你自己的工作流程直接以 SHA 釘選呼叫內部元件。
在組織設定中強制 SHA 釘選,而非交由個人自行決定
2025 年 8 月,GitHub 在允許 Action 的政策中新增了一個選項,要求 Action 必須以完整 commit SHA 釘選。此設定可在企業、組織或儲存庫層級套用,使用未釘選 Action 的工作流程將會失敗。同一政策也可封鎖特定 Action 或版本,這也提供了在類似本次的事件中,於整個組織停用受影響版本的方法。
不要只依賴「Immutable」標章
根據公告,Trivy v0.69.3 與 trivy-action 0.35.0 之所以未被波及,是因為 GitHub 的不可變發布(immutable releases)在它們發布之前即已啟用。然而 Aqua 表示,「Immutable」標章也出現在被改寫的標籤旁,因此以完整 commit SHA 釘選,而非依賴標章,才是可靠的防護。該標章只說明某個發布在發布當時的狀態。
依版本釘選二進位檔並驗證簽章;以 digest 引用映像
在公告中,以 digest(@sha256:…)引用的映像未受影響。若僅以 latest 或版本標籤拉取,則在暴露期間可能會取得惡意建置。Trivy 的公告也說明如何以 Sigstore 簽章與簽署時間戳記驗證二進位檔與映像。對於 CI 下載的工具,請明確指定版本,並在可能時以 digest 或校驗碼釘選。
在不持有部署機密的工作中執行掃描工具
根據 Aqua,惡意程式碼在正常掃描之前執行,而掃描輸出看起來正常,因此難以察覺。掃描通常不需要對你的雲端或登錄檔擁有寫入權限。請在獨立、不接收任何部署機密的工作中執行掃描,並將 permissions: 設為唯讀。
根據 Aqua,備用外洩路徑只在個人存取權杖(PAT)被傳入工作流程時才會生效,若使用預設的 GITHUB_TOKEN 則會失敗。請確認你沒有將個人權杖交給掃描步驟。
事件經過(依據 Aqua Security 的揭露)
以下內容均依 Aqua Security 的揭露(3 月 22 日的初始貼文,以及至 4 月 1 日的更新)與 Trivy 的安全公告撰寫。時間為 UTC。
2026 年 2 月底
Trivy 的 GitHub Actions 環境中的一項設定錯誤遭到利用,一組具特權的存取權杖被擷取。3 月 1 日
Trivy 團隊揭露該事件並輪替憑證。根據 Aqua,輪替並非一次完成,攻擊者透過仍有效的憑證持續保有存取權。3 月 19 日,約 17:43
77 個 trivy-action 標籤中的 76 個,以及全部 7 個 setup-trivy 標籤,被重新指向惡意 commit。同時,遭入侵的服務帳戶觸發發布自動化流程,發布了惡意的 Trivy v0.69.4(18:22 起可取得該產物)。3 月 19 日,約 20:38
Trivy 團隊識別並遏止攻擊,並從發布管道移除惡意產物。3 月 20 日
發布安全版本、使用者指引與入侵指標。3 月 21 日
安全公告 GHSA-69fq-xp46-6x23(CVE-2026-33634)發布。3 月 22 日
惡意映像 v0.69.5 與 v0.69.6被推送至 Docker Hub(使用另一組遭入侵的 Docker Hub 憑證)。同日,Aqua 的內部儲存庫在未經授權的情況下被公開至 GitHub。Aqua 表示,攻擊者在初步遏止後已重新取得存取權。3 月 23 日
Aqua 引入外部事件應變公司參與調查。另有 KICS(Aqua 的另一款掃描工具)的 GitHub Action 遭到平行入侵,已被識別。4 月 1 日
Aqua 表示調查已接近完成,目前仍無跡象顯示其商業產品受到影響。
- 受影響範圍
- Trivy v0.69.4(二進位檔、deb/rpm、容器映像)、Docker Hub 上的 v0.69.5 與 v0.69.6、除 0.35.0 以外的每個 trivy-action 標籤,以及每個 setup-trivy 標籤
- 惡意程式的行為
- 從 CI runner 與機器收集雲端、SSH、Kubernetes、Docker、Git 與資料庫憑證以及
.env檔案,加密後外傳。它在正常掃描之前執行,因此結果看起來正常 - 起因
- 2 月底透過 GitHub Actions 設定錯誤擷取一組具特權的權杖;由於 3 月 1 日的輪替並非一次完成,存取權得以保留
- Aqua 的回應
- 從所有管道移除惡意產物;刪除或將被改寫的標籤重新指向已驗證的 commit;鎖定開源組織中的所有自動化、服務帳戶與權杖;減少對長期有效憑證的依賴;導入不可變發布驗證與來源證明(provenance attestations)
- 未受影響
- 商業產品,包括 Aqua Platform 內的 Trivy(建置於與 GitHub 分開的基礎架構上,不共用機密或簽署系統)
閱讀說明:尚未公布受害者數量
Aqua 表示,由於 Trivy 是開源軟體,它無法完整掌握所有使用者,也無法直接通知每一位使用者。目前尚未公布受影響組織的數量,本站也不列出推估數字。
Aqua 的揭露文件也提及攻擊者及協助分析的外部公司;依本站政策,我們只列出揭露此事件的組織。請依據你的工作流程是否在受影響時段內以受影響的引用方式執行來判斷,而非依據聳動的數字。
在哪個階段本可以預防
1. 2 月底至 3 月 1 日
權杖被擷取;輪替耗時數天
↓→
教訓(組織內)
全部停用,然後一併重新核發
2. 3 月 19 日:標籤被改寫
相同的標籤名稱現在指向惡意 commit
↓→
可預防此事件的設定
以政策強制 SHA 釘選,內部元件也一併釘選
3. 惡意的 v0.69.4 與 latest
在每個官方管道上發布
↓→
可預防此事件的設定
明確指定版本、digest、簽章檢查
4. 你的 CI 工作
掃描執行前機密已被收集
↓→
限制損害
掃描工作中不放置機密或個人權杖
受影響的引用方式(依公告)
- 標籤引用,例如
trivy-action@0.34.2(0.35.0 以外的任何版本) - 明確設定
version: latest(在二進位檔暴露期間) - 以 SHA 釘選到 2025 年 4 月 9 日之前的 commit(內部 setup-trivy 以標籤被呼叫)
- 任何未以 SHA 釘選的
setup-trivy引用 - 映像標籤,例如
latest或0.69.4
未受影響的引用方式
trivy-action@0.35.0(在其發布前已啟用不可變發布)- 2025 年 4 月 9 日之後指向安全 commit 的 SHA 釘選
- 以 SHA 釘選到安全 commit 的
setup-trivy - 以 digest 引用的映像
- Trivy v0.69.3 及更早版本、從原始碼建置的版本、官方 Homebrew formula
本站的看法:懷疑遭入侵時,應一次更換所有金鑰
金鑰輪替通常是逐一進行,從最不關鍵的開始,且不中斷服務。避免停機確實是實際的好處,但 Trivy 事件顯示,這種做法無法切斷仍持有存取權的攻擊者。根據 Aqua,在歷時數天的輪替期間,仍有效的權杖可能被用來連新核發的機密也一併取得,並在三週後導致了惡意發布。
懷疑遭入侵時,請依以下順序輪替:(1) 列出每一把金鑰及其可能被讀取的位置,(2) 一併作廢舊金鑰,(3) 之後才核發新金鑰,(4) 確認舊金鑰確實已失效。請預期會有短暫停機。一般的做法——新舊金鑰並行——假設的是沒有任何外洩。
再提醒一點。由於弱點掃描工具是防禦性工具,它往往比 CI 中幾乎任何其他項目都更常在更多地方、以更廣的權限執行。不要因此而鬆懈:請讓它在無法讀取你機密的工作中執行。
資料來源(公開紀錄)
本文事實來自以下公開來源。攻擊技術、IoC 數值及可辨識攻擊者的資訊均未涵蓋。
- Aqua Security,"Trivy Supply Chain Attack: What You Need to Know"(2026 年 3 月 22 日初始貼文,4 月 1 日更新)— aquasec.com
- Trivy 安全公告,"Trivy ecosystem supply chain temporarily compromised",GHSA-69fq-xp46-6x23(CVE-2026-33634;3 月 21 日發布,3 月 30 日更新)— github.com
- Trivy,"Trivy Security incident 2026-03-19"(GitHub Discussions,Trivy 團隊的狀態更新)— github.com
- GitHub Changelog,"GitHub Actions policy now supports blocking and SHA pinning actions"(2025 年 8 月 15 日)— github.blog
- GitHub Docs,"Secure use reference"(使用第三方 Action)— docs.github.com
更新紀錄
2026-09-30:首次版本,依據 Aqua Security 的揭露(4 月 1 日更新)與 Trivy 的安全公告(3 月 30 日修訂)撰寫。
延伸閱讀
- SHA 釘選,以及為何單一人員不應能夠發布:TanStack、Nx Console 與 GitHub 的事件鏈
- 遭竊 npm 權杖的撤銷順序:防禦 npm 供應鏈蠕蟲
- 機密存放在哪裡:.env 檔案與 API 金鑰的風險所在 / 使用 gitleaks 在提交前攔截機密
- 平台的環境變數外洩時:Vercel 資安事件後開發者應採取的行動
- PyPI 與 Docker 上的相同類型事件:LiteLLM 1.107.0 中的惡意程式與使用者應採取的行動
- 其他 2026 年事件:2026 年的資料外洩與網路攻擊