
CodeQL 2.26.4 強化 GitHub Actions 安全性,檢查可重複使用工作流程
核心重點
GitHub 於 2026 年 8 月發佈的 CodeQL 2.26.4 版,首次將 可重複使用工作流程(reusable workflows)納入安全檢查範圍,能偵測引用變動分支或標籤的設定,並改進事件欄位的判斷機制,避免誤將無效條件視為防護。
背景與技術說明
GitHub Actions 允許一套工作流程呼叫其他工作流程,讓團隊可以共用建置、測試與部署的設定。傳統上,CodeQL 已能檢查 Action 是否以固定版本(如 SHA‑1 提交)引用,防止因上游 Action 被竄改而導致供應鏈攻擊。
為何要檢查可重複使用工作流程?
- 變動分支或標籤的風險:若在
uses:欄位寫入main、dev或可變的 tag(如v1),上游工作流程日後更新,下一次執行時會自動拉取最新程式碼,增加軟體供應鏈被竄改的機會。 - 安全最佳實踐:建議改以完整的 Git 提交 SHA(例如
a1b2c3d4…)指定版本,確保每次執行取得相同內容。
CodeQL 2.26.4 會在掃描時偵測這類引用,若發現使用了非固定的分支或標籤,即產生 警示,提醒開發者改為 SHA 固定。
事件欄位判斷的改進
GitHub Actions 的觸發事件(如 pull_request、issues)會提供不同的 payload 欄位。例如,pull_request 事件會包含 sender.login,而 issues 事件則不一定提供同樣欄位。先前的 CodeQL 版本在判斷安全條件時,若工作流程檢查了不存在的欄位,仍可能誤判為「已防護」。
新版先驗證觸發事件實際包含的欄位,只有在確實可取得該資訊時,才視條件為有效。這意味著,以 pull_request 才有的使用者資訊作為限制,若工作流程是由 issues 事件觸發,將不再被當作防護,相關程式碼掃描可能會出現新的安全警示。
其他語言支援與功能提升
- Go 1.27:加入最新的 Go 版本支援,讓開發者能在新語法下受益於 CodeQL 的靜態分析。
- Rust:提升資料流警示的定位精準度,減少誤報。
- Java / Kotlin:新增對 Spring R2DBC 的 SQL 注入檢查,針對非同步資料庫存取提供防護。
- Python:擴充對串列操作中不受信任資料的追蹤,提升偵測能力。
GitHub.com 的程式碼掃描服務已自動採用此新版,未來也會同步至 GitHub Enterprise Server,確保企業內部環境同樣受惠。
未來展望與讀者啟示
CodeQL 2.26.4 的更新顯示 GitHub 正持續深化供應鏈安全防護,特別是針對 可重複使用工作流程 這一新興攻擊向面。開發團隊應立即檢視現有 workflow,將所有 uses: 參照改為固定 SHA,並確認事件條件的欄位對應正確,以免因誤判而留下安全漏洞。
同時,隨著多語言支援的擴充,安全團隊可以在同一平台上統一管理 Java、Kotlin、Go、Rust、Python 等多樣技術棧的靜態分析,提升整體資安可見度。
行動建議:
- 在 CI/CD 設定中搜尋
uses:後接分支或 tag 的寫法,逐一改為 SHA。- 針對每個工作流程的觸發事件,檢查條件使用的欄位是否真的存在。
- 訂閱 GitHub 官方的安全更新,確保未來的 CodeQL 版本能即時納入安全防護。
透過上述步驟,企業與開源專案皆能在供應鏈安全上建立更堅實的防線。