程式忍者PGNinja

GitHub Blog

GitHub Actions 推出工作流程鎖定檔,防堵標籤被偷換成惡意版本

· GitHub Actions 新增 workflow lockfile 公開預覽功能,把 Action 鎖定在特定提交,避免標籤或分支被竄改後偷換成惡意程式碼。

GitHub 為 GitHub Actions 推出「工作流程鎖定檔案」(workflow lockfile)功能,目前是公開預覽(public preview)階段。GitHub Actions 的工作流程通常會引用別人寫好的 Action,而這些 Action 常用版本標籤(tag)或分支名稱來指定版本;問題是標籤和分支在發布之後仍然可能被移動或改指到別的提交,等於版本號看起來沒變,內容卻可能已經不同。這項新功能就是為了解決這種「名稱沒變、內容被偷換」的風險而設計。

實作上,開發者可以用 GitHub 推出的命令列擴充工具 gh actions-lock,產生一份放在 .github/workflows/actions.lock 的鎖定檔案,裡面會記錄工作流程用到的每一個 Action(以及它們間接依賴的其他 Action)所對應的確切提交(commit),之後工作流程執行時就會照著鎖定檔案裡記錄的提交版本跑,而不是重新去看標籤目前指到哪裡。採用方式也設計成可以一個工作流程、一個工作流程慢慢上,上了鎖的工作流程之後就必須在鎖定檔裡有對應紀錄。

這個做法要防的是供應鏈攻擊:如果某個被廣泛使用的 Action 遭到入侵,攻擊者只要把原本的版本標籤改指到一個夾帶惡意程式碼的新提交,使用那個標籤的工作流程下次執行時就會不知不覺跑到被動過的程式碼,而且不需要修改使用者自己的倉庫就能得手。鎖定檔案把「這次要用哪個版本」固定在明確的提交雜湊上,等於替整條建置與部署流程多上一道鎖,GitHub 也讓 Dependabot 可以自動幫忙更新鎖定檔的項目。

這則新聞偏向開發團隊與維運人員會關心的平台安全功能,對剛入門寫程式的孩子來說比較抽象,但背後的觀念很實用:在真實世界的軟體專案裡,我們常常會用到別人寫好的程式碼或工具,而「我用的這段程式碼到底有沒有被偷偷換掉」本身就是重要的資訊安全問題,值得將來接觸團隊協作或開源專案時記在心裡。

開發工具資訊安全供應鏈安全

其他新聞