對開發者來講,在 GitHub 上建立了一個項目準備運行,並不表明這個項目已經真正完成了,還有不少部署測試工做須要手動操做。segmentfault
GitHub 的 Action 功能能夠簡化這一步,對項目的代碼進行自動化的測試,如今已經有不少人使用它來持續集成/連續部署(CI/CD),但最近 Actions 中被發現隱藏了一個安全漏洞。安全
Google Project Zero 的研究人員發現,GitHub Action 的一個設計缺陷可使黑客可以寫入開發者的存儲庫,甚至能夠顯示加密的機密文件。工具
Google Project Zero 研究員 Felix Wilhelm 發現,GitHub Actions 工做流命令功能充當 Action Runner 和執行的動做之間的通訊渠道。這意味着工做流命令經過解析全部已執行操做的 STDOUT 來工做,STDOUT 攜帶的那些命令之一是「set-env」。測試
Set-env 能夠將任意環境變量定義爲工做流的一部分,極易受到注入攻擊。當運行程序解析每一個 STDOUT 行以查找工做流命令時,每一個「在執行過程當中打印不受信任的內容的 Github Action 都將受到攻擊」。加密
Felix Wilhelm 研究了一些受歡迎的 Github 存儲庫,他發現幾乎全部具備某些複雜 GitHub Actions 的項目均可能受到攻擊,即便 Github 自身的行爲也容易受到此問題的影響。spa
據瞭解,Google Project Zero 在爲 GitHub 提供的 90 天修復期的基礎上還將這個時間延長了 14 天,在 GitHub 再次提出延長寬限期後,Google Project Zero 拒絕了這個請求,並披露了漏洞的詳細狀況。設計
Google Project Zero 是谷歌於 2014 年宣佈的互聯網安全項目,整個團隊由谷歌內部頂尖的安全工程師組成,發現、跟蹤和修復還沒有被公開的軟件安全漏洞。blog
Google Project Zero 所處理的安全漏洞一般都屬於「零日漏洞」,此類安全漏洞一般都還沒有被公開,用戶不能在第一時間對其進行修復。爲了阻止黑客利用零日漏洞發起攻擊,谷歌推出了 Project Zero 計劃。開發
據瞭解,Google Project Zero 發現漏洞後會首先與受影響的機構聯繫,給出 90 天的修復期,漏洞修復完成後纔會公開相關信息。今年 7 月,Project Zero 團隊已向 GitHub 發出了漏洞警告。部署
Felix Wilhelm 坦言,隱藏在GitHub Action工做流命令中可能會遇到更多麻煩,他認可他沒有考慮其餘工做區命令的安全影響。
Felix Wilhelm 認爲,「實現工做流命令的方式根本上是不安全的。廢除 v1命令語法並使用 allowlist 增強 set-env 可能不利於直接的 RCE [遠程代碼執行]向量。然而,即便可以覆蓋後面步驟使用的‘正常’環境變量,也可能足以利用最複雜的操做。」
固然,也有一勞永逸解決這個問題的方法。Felix Wilhelm 建議將工做流命令移動到某個不受約束的通道(例如一個新的文件描述符),以免解析 STDOUT。但這樣作也存在一個小問題,它會破壞許多現有的代碼操做。
GitHub 的開發人員正在從 Runner 中刪除兩個最易受攻擊的命令。將來 Runner 將發佈一個更新,該更新將會禁用 set-env 和 add-path 工做流命令。
同時,GitHub 建議開發者「應該升級到 @actions/core v1.2.6 或更高版本,並用新的 Environment File Syntax 替換工做流中的 set-env 或 add-path 命令的任何實例。」
若是繼續使用舊命令或舊工具包版本的工做流和操做,那麼 GitHub 會發出警告,若是繼續嘗試使用舊的不安全命令,工做流執行過程將會出錯。
就像安全問題常常發生的那樣,是時候開始修補和清理代碼了。開發人員的安全工做永遠不會完成…...