GitHub Actions 是最薄弱的一環:CI/CD 供應鏈攻擊全面解析
nesbitt.io · 2026-04-28
從 2024 年 spotbugs 到 2026 年 4 月的 elementary-data,軟體供應鏈攻擊不斷以 GitHub Actions 作為入侵跳板。此文系統整理了六大攻擊向量、八起已記錄事件與具體防禦措施。
六大攻擊向量
| 向量 | 機制 |
|---|---|
pull_request_target 誤用 | 此觸發器在 fork 程式碼中執行時授予完整 secret 存取與寫入 token,攻擊者可在基底儲存庫信任邊界內執行任意程式碼 |
| 可變 action 參照 | 以 git tag 而非 commit SHA 引用 action,遭 force-push 竄改後觸發惡意程式碼(tj-actions 事件) |
| 快取投毒 | 跨分支共享的 Actions 快取允許 pull_request_target 工作流寫入惡意快取,由後續的發布工作流恢復並執行 |
| Shell 模板注入 | ${{ github.event.* }} 在進入 shell 步驟前擴展,PR 標題中的命令替換字串直接成為可執行程式碼 |
| 預設寫入 token | 2023 年 2 月前建立的儲存庫,工作流預設使用寫入 token,可未授權發布到套件倉庫 |
| 冒名提交 | runner 從包含 fork 提交的共享物件池解析 action 版本,攻擊者可透過可變 tag 指向惡意 SHA |
已記錄的重大事件
| 事件 | 日期 | 影響 |
|---|---|---|
| spotbugs | 2024-11 | PAT 洩露,引發後續攻擊 |
| Ultralytics | 2024-12 | 快取投毒,加密礦工推送至 PyPI |
| tj-actions CVE-2025-30066 | 2025-03 | 23,000 個儲存庫執行記憶體抓取程式 |
| reviewdog CVE-2025-30154 | 2025-03 | CISA 通報,Coinbase 遭鎖定 |
| Trivy | 2026-02/03 | 76 個 tag 被重新指向,PAT 竊取 |
| elementary-data | 2026-04 | 10 分鐘內惡意 wheel 發布至 PyPI 與 GHCR |
規模數據
91% 的 PyPI 套件所使用的第三方 action 至少有一個以可變 tag 引用;三分之二的工作流缺少 permissions: 宣告;數百個套件仍指向已洩露一年以上的 tj-actions。
防禦措施
以 commit SHA(而非 tag)固定 action 引用;在工作流根層級加入 permissions: {} 只授予必要權限;避免在不可信輸入的工作流中使用 pull_request_target;以 zizmor 掃描工作流中的 dangerous-triggers、cache-poisoning、unpinned-uses、template-injection、excessive-permissions。
原始來源:nesbitt.io
Cloudflare 2026 Q1 網路中斷回顧:從全國封鎖到雲端基礎設施遭無人機攻擊
Cloudflare Blog · 2026-04-28
Cloudflare Radar 記錄的 2026 年第一季呈現出網路中斷的新型態:政府主導的封鎖、戰區能源設施攻擊,以及首次出現的雲端資料中心遭受直接無人機打擊。
政府主導封鎖
烏干達(1/13–1/26):配合 1/15 總統大選,境內流量從烏干達網際網路交換點約 72 Gbps 驟降至 1 Gbps,1/13 18:00 當地時間起封鎖,1/17 23:00 部分恢復,1/26 全面恢復。
伊朗(1/8–Q1 結束):兩次封鎖(1/8 和 2/28),IPv6 地址空間的撤銷先於流量中斷數小時出現(Asiatech AS43754 撤除 446 萬 /48 等價位址,RASANA AS31549 撤除 419 萬),流量降至原本的 1% 以下。封鎖方式為過濾而非路由撤除。
剛果共和國(3/15):總統大選前 60 小時封鎖,1:30 當地時間流量近乎歸零。
無人機與軍事攻擊
AWS 中東(3/1–3/2 及 3/23):me-central-1(阿聯酋)與 me-south-1(巴林)兩個區域因無人機直接打擊,出現多日延續的連線故障率上升——這是雲端基礎設施首次遭受此類直接實體攻擊。
烏克蘭(1/7 及 1/26):俄羅斯對能源基礎設施的攻擊造成哈爾科夫(Kharkiv)流量各次約 50% 下降。
電力網崩潰連鎖效應
古巴在 Q1 經歷三次完整電網崩潰:3/4(西半部,-50%)、3/16(全島,-65%,超過 30 小時)、3/21(-77%)。巴拉圭 2/18 主要輸電線路故障造成 72% 流量下降、持續約 3 小時。摩爾多瓦 1/31 400kV 與 750kV 輸電線同時斷路,造成 46% 區域流量下降。
海纜損毀
剛果共和國 Congo Telecom(AS37451)因西非海纜系統(WACS)損毀,1/2 起流量降至預期水準的 18%,持續至 1/4。
原始來源:Cloudflare Blog
pip 26.1:依賴冷卻(dependency cooldown)機制與 pylock.toml 格式支援
LWN.net · 2026-04-27
pip 26.1 帶來兩項針對軟體供應鏈安全與可重現性的功能:dependency cooldown 機制與實驗性 pylock.toml 支援。
Dependency Cooldown
Dependency cooldown 在解析依賴時,對近期才發布的套件版本施加一段等待期,不自動選擇該版本,理由是供應鏈攻擊(如 typosquatting 或帳號接管)往往在套件發布後的短暫窗口內注入惡意版本。等待期讓社群有時間發現問題後,pip 再考慮自動採用。此機制的設計思想來自 pip 長期存在的「快速採用新版本」行為,被認為是供應鏈風險因素之一。
pylock.toml(PEP 751)
pip 26.1 加入實驗性的 pylock.toml 支援,對應 PyPA 規格。pylock.toml 是 Python 套件生態系統的標準化鎖定文件格式,以 TOML 記錄確定性的依賴解析結果,旨在跨工具相容(pip、uv、poetry 等),解決現有鎖定格式(如 poetry.lock、requirements.txt)各自為政、不可互換的問題。
解析器改進
此版本繼續推進移除遺留解析器的目標,解析器改進使 pip 更接近完全使用新解析器的里程碑。
Ubuntu 26.04 LTS「Resolute Raccoon」:TPM 磁碟加密與 Rust coreutils 預設啟用
LWN.net · 2026-04-23
Ubuntu 26.04 LTS(代號 Resolute Raccoon)於 2026-04-23 發布,桌面、伺服器、Cloud、WSL 與 Core 版本提供 5 年維護更新,官方衍生版(Kubuntu 等)3 年。
TPM 支援的全磁碟加密
Ubuntu 26.04 引入以 TPM 為後盾的全磁碟加密功能,在不影響開機體驗的前提下,利用硬體安全元件封存磁碟加密金鑰,防止冷啟動攻擊與離線暴力破解。
Rust coreutils 預設啟用
rust-coreutils 在此版本成為預設的 coreutils 實作,以記憶體安全的 Rust 取代 C 語言的 GNU coreutils,降低潛在的記憶體安全漏洞面積。然而,cp、mv、rm 三個指令因 rust-coreutils 存在未解決的 TOCTOU(time-of-check time-of-use)安全問題而保留 GNU 版本,Canonical 計畫在 26.10 完成全面遷移。
其他安全強化
Livepatch 支援擴展至 ARM 系統,減少因核心安全更新而需要重啟的停機時間。應用程式權限控制進一步強化。
原始來源:LWN.net
Famfs:LSFMM+BPF 峰會後大幅修改的共享記憶體檔案系統
LWN.net · 2026-04-23
Famfs 是一個針對共享記憶體(shared memory/fabric-attached memory)設計的 Linux 檔案系統,在 2026 年的 Linux Storage, Filesystem, Memory Management + BPF Summit(LSFMM+BPF)後進行了架構層面的重大修改。
設計目標
Famfs 以 DAX(Direct Access)模式運行,允許多個節點同時透過同一個記憶體媒介(如 CXL 共享記憶體)存取檔案,不涉及頁面快取,資料直接從記憶體對應(mmap)至使用者空間。這對高效能運算(HPC)與 AI 工作負載特別有意義,因為模型權重或資料集可在節點間直接共享,無需網路傳輸或資料複製。
FUSE 與 BPF 整合
峰會討論後的修改方向包含 FUSE 與 BPF 的整合,使 Famfs 在進入核心主線前能以更少的核心補丁提供功能原型,降低上游審查門檻,同時允許使用者空間組件協助處理元資料管理。
原始來源:LWN.net