觀點

GitHub Actions憑證管理陷阱:Repository Secrets設計缺陷恐成資安破口

2025 / 07 / 28
編輯部
GitHub Actions憑證管理陷阱:Repository Secrets設計缺陷恐成資安破口
TWCERT/CC官網報導,GitHub儲存庫機密資料(Repository Secrets)的設計存在潛在風險,只要擁有儲存庫寫入權限的使用者,就可能存取甚至竊取機密資料。為了降低風險,建議使用GitHub環境機密資料(Environment Secrets)的保護規則和正確配置的OIDC(OpenID Connect)信任策略,以強化憑證與密鑰的安全性。

除了機制設計問題外,初學者在撰寫GitHub Action Workflow時的錯誤用法,也常造成機密洩漏風險。最常見的情況是直接將機密資料值寫入工作流程檔案中,使得敏感資訊如金鑰或密碼暴露於公開程式碼之中,嚴重威脅系統安全。

儲存庫機密資料存在根本性設計缺陷

目前網路上廣為流傳的做法,是透過GitHub的介面在路徑「settings → secrets and variables → actions」中設定儲存庫機密資料。設定完成後,開發者便可在GitHub Actions的Workflow中直接引用變數名稱。這種方式表面上來看具備一定隱蔽性,因為UI中無法直接查看密文內容,但實際上卻潛藏重大風險。

根據GitHub官方文件說明,任何擁有儲存庫「寫入權限」的使用者,都能藉由修改Workflow,間接「讀取」並外洩這些機密資料。因此,建議確保在Workflow中使用的憑證權限要設為「最低必要權限」。

若未妥善設定,攻擊者可建立自訂的Workflow,透過將機密資料輸出到日誌或將其傳送至外部伺服器等手法,達到外洩目的,對組織資安造成實質威脅。這種攻擊方式特別危險,因為它利用了GitHub Actions本身的合法功能,很難被偵測到。

擁有寫入權限的惡意使用者或遭入侵的帳號,可以輕易建立包含惡意程式碼的工作流程,將機密資料輸出或傳送到攻擊者控制的外部系統。由於這些操作在技術上都是「合法」的GitHub Actions執行,因此很容易規避常規的安全監控。

環境機密資料提供更完善保護

為了因應上述風險,推薦使用GitHub的環境機密資料搭配部署保護規則(Deployment Protection Rules)。這項機制允許開發者在每個環境設定獨立的機密資料,並透過細緻的保護規則控管其使用條件。

當工作流程中的某個作業嘗試存取指定環境的機密資料時,必須先通過該環境設定的保護規則,才能取得執行權限。這種設計提供了額外的安全層級,即使攻擊者擁有儲存庫寫入權限,也無法任意存取受保護環境中的機密資料。

保護規則可以包括必要的審核者批准、等待時間限制,或僅允許特定分支存取等條件。這些機制大幅提升了機密資料的安全性,特別適用於生產環境的部署流程。

OIDC結合IAM提供動態憑證管理

另一項有效強化措施是利用OIDC結合AWS IAM,以避免在GitHub儲存庫中長期儲存敏感憑證。當使用者發出請求時,透過GitHub Action動態請求AWS所提供的短期憑證,即使工作流程被竄改,也只有在允許的條件下才能取得憑證。

這種方法的優勢在於憑證的短期性質。每次執行時產生新的臨時憑證,大幅降低了長期憑證被濫用的風險。同時,OIDC可以根據執行環境、分支、儲存庫等多項條件進行細緻的存取控制。

兩種安全方案比較分析

環境機密資料方案採用長期憑證,存取控制細緻度中等,主要透過環境限制來管控。雖然一旦洩漏可能被長期使用,但設定相對簡單,適合初學者或小型專案使用。可審核性方面有一定限制,但仍能提供基本的安全保障。

OIDC + IAM Role方案使用短期憑證,每次執行時動態產生,提供高度細緻的存取控制,可限制分支、環境、儲存庫、觸發者等多項條件。即使憑證洩漏,也會在短期內自動失效。此方案具備高度可審核性,可搭配AWS CloudTrail、IAM認證紀錄進行完整的存取追蹤,但設定複雜度較高,需要AWS IAM與信任策略的專業知識。

從憑證型態來看,環境機密資料採用長期憑證,而OIDC + IAM Role則是每次執行產生短期憑證。在風險控管方面,前者一旦洩漏可長期使用,後者洩漏後會短期失效。複雜度上,環境機密資料設定簡單,OIDC方案稍高但安全性更佳。
 
Environment Secrets和OIDC + IAM Role二種方式比較表

建議採用多層次安全策略

考量到不同組織的技術能力和安全需求,建議採用多層次的安全策略。對於安全要求較高的生產環境,應優先考慮OIDC + IAM Role方案,以獲得最佳的安全保護。對於開發或測試環境,環境機密資料搭配適當的保護規則也能提供足夠的安全性。

無論採用何種方案,都應避免使用儲存庫機密資料來儲存敏感憑證,特別是具備高權限的生產環境憑證。同時,定期檢視和輪換憑證、實施最低權限原則,以及建立完善的監控機制,都是確保GitHub Actions安全的重要措施。

透過正確的配置和管理,GitHub Actions可以在提供開發效率的同時,維持良好的安全性。關鍵在於理解各種機制的優缺點,並根據實際需求選擇適當的安全策略。

本文轉載自TWCERT/CC。