![]()
2026年3月,Trivy的77個發布標簽里有76個被投毒。安全團隊 grep 搜遍工作流文件,沒找到 trivy-action 字樣,以為安全。結果憑證照樣被洗劫一空。
問題出在「看不見」的第三層。
GitHub Actions 的依賴樹比應用代碼更深,但沒人跟蹤它。你顯式引用的只是冰山一角——復合動作(composite actions)里嵌套的動作、可復用工作流(reusable workflows)調用的動作、還有那些靜默下載外部工具的封裝器,統統不在代碼審查的視野內。
這就是 ABOM(Actions Bill of Materials,動作物料清單)要解決的問題。如果你熟悉 SBOM(軟件物料清單),邏輯一摸一樣:SBOM 管應用依賴,ABOM 管流水線依賴。而眼下,絕大多數組織對 CI 里實際跑著什么一無所知。
一次攻擊,三層穿透
攻擊者這次玩得很細。他們沒碰 Trivy 官方倉庫,而是污染了發布標簽。當 ghaction-container-scan 這類封裝動作內部拉取 Trivy 時,惡意代碼順著管道流入。
后果清單夠看一陣:AWS 憑證、Kubernetes 令牌、Docker 配置、SSH 密鑰,從 CI 運行器(runner)里被批量抽走。然后用偷來的 npm 憑證,把自傳播蠕蟲寫進下游包。整個鏈條的起點,是那條你從沒直接寫進過 YAML 的依賴。
GitHub Actions 的依賴結構有三層,grep 只能掃到第一層:
![]()
直接依賴——工作流文件里顯式寫的 uses: 行,這是安全團隊日常審查的范圍。
傳遞依賴——復合動作或可復用工作流內部調用的動作,一層套一層,五六層嵌套不算罕見。你的工作流只寫一行,背后可能扯出一串動作鏈。
嵌入式工具——動作本身不依賴其他動作,但會靜默下載 Trivy、Grype、Snyk 這類外部掃描器。它們完全不體現在動作依賴關系里,必須解析動作的元數據和輸入參數才能發現。
Trivy 事件之前,這算是理論風險。之后,它成了 2026 年開年最扎心的供應鏈安全案例之一。
ABOM 到底記什么
ABOM 的核心是遞歸解析。它把每個工作流展開成完整的動作調用圖譜,記錄五個關鍵字段:
所有者與倉庫名、版本引用方式(固定 SHA 還是浮動標簽)、解析路徑(你的工作流如何一步步走到這個動作)、以及它屬于哪類依賴(直接/傳遞/嵌入)。
版本引用的細節尤其要命。GitHub Actions 允許用 @v3 這類標簽,也允許用 @a1b2c3d 這類不可變 SHA。標簽方便,但可被重新指向;SHA 安全,但更新痛苦。ABOM 會標記每個動作用的是哪種策略,讓你在便利性和可復現性之間做知情選擇。
![]()
遞歸解析傳遞依賴是技術難點。復合動作可以嵌套復合動作,可復用工作流可以調用其他可復用工作流,理論上無限深。實際實現需要處理循環引用、私有倉庫權限、以及 GitHub API 的速率限制。但不做這層展開,你就永遠不知道 ghaction-container-scan 背后藏著 Trivy。
嵌入式工具的檢測更麻煩。它們不表現為動作依賴,而是表現為動作的運行時行為。ABOM 的實現需要靜態分析動作的 YAML 定義,識別那些下載外部可執行文件的步驟,然后把這些工具也納入清單。
兩個實戰場景
第一個場景是應急響應。某個 GitHub Action 被曝漏洞,你需要幾分鐘內確認影響面,而不是手動審計每個復合動作。查詢 ABOM,輸入動作名,立即得到直接引用、傳遞引用、嵌入引用的完整列表,包括哪些倉庫、哪些工作流、哪些分支。
第二個場景是 CI 門禁。每次 Pull Request 生成 ABOM,與基線對比。新增的動作自動觸發審批流,版本引用從 SHA 變成標簽時告警,已知風險動作直接阻斷合并。把供應鏈安全左移到代碼提交之前。
這兩個場景的共同點是:它們都把「事后諸葛亮」變成「事前可預防」。Trivy 事件中,受影響的組織如果能提前生成 ABOM,至少能在攻擊標簽發布后的第一時間定位到暴露點,而不是等憑證已經泄露才反應過來。
ABOM 不是 SBOM 的替代品,是補集。 SBOM 管構建產物,ABOM 管構建過程。一個 compromised 的 CI 動作可以污染所有它接觸的產物,還可以橫向滲透到下游系統——而這些污染根本不會出現在 SBOM 里。
供應鏈安全的視角正在從「我依賴了什么代碼」擴展到「我用什么工具鏈構建代碼」。這個擴展不是可選升級,是結構必需。當你的流水線比應用本身更復雜時,流水線就是新的攻擊面。
GitHub 官方目前還沒有原生 ABOM 支持,但社區工具鏈正在快速補齊。關鍵問題從「能不能做」變成「什么時候做」——以及,你的組織愿意在下一個 Trivy 事件之前,還是之后,開始盤點 CI 里的暗物質?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.