Gogs 是一款流行的開源自託管 Git 服務,近期被發現一個極為嚴重的安全性漏洞,允許任何已驗證的用戶在特定條件下達成遠端程式碼執行,也就是所謂的 RCE (Remote Code Execution)。這個漏洞的 CVSS 評分高達 9.4 分,代表其危險程度極高,且目前的攻擊門檻非常低。
漏洞觸發的核心原理
這個漏洞的成因在於 Gogs 在處理合併請求(Pull Request)時,對 Git Rebase 操作的參數驗證不足。
首先我們需要理解什麼是 Rebase。在 Git 的實務中,Rebase 是一種將一個分支的提交紀錄重新定位到另一個分支頂端的行為,目的是為了讓專案的提交歷史呈現線性,而非像 Merge 那樣產生分叉。
然而,Git 的 rebase 指令本身提供了一個名為 exec 的參數。這個參數的功能是在每一次提交紀錄被重新套用後,執行一段指定的 Shell 指令。如果系統在呼叫 git rebase 時,沒有對輸入的分支名稱或參數進行嚴格的過濾,攻擊者就可以透過構造一個特殊的惡意分支名稱,將 exec 指令注入到系統命令中。
攻擊路徑與實務影響
對於 Junior 工程師來說,最需要警覺的是這個漏洞不需要管理員權限,甚至不需要其他用戶的互動。
在預設配置的 Gogs 實例中,只要攻擊者能註冊帳號並創建儲存庫(Repository),他就是該儲存庫的所有者。攻擊者只需在設定中開啟 Rebase 合併選項,然後建立一個帶有惡意名稱的分支並發起合併請求,伺服器在執行 Rebase 操作時就會觸發注入的指令,從而讓攻擊者在伺服器上執行任意程式碼。
即便在限制註冊的環境下,只要攻擊者擁有任何一個開啟了 Rebase 合併功能的儲存庫寫入權限,同樣可以發動攻擊。
一旦 RCE 成功,攻擊者將獲得伺服器的控制權,其影響範圍包括: 第一,讀取該伺服器上所有用戶的私有儲存庫,導致跨租戶的數據外洩。 第二,竊取伺服器上的憑證或金鑰。 第三,將該伺服器作為跳板,進一步滲透內網中的其他系統。 第四,直接竄改託管在伺服器上的原始碼。
目前的防禦建議與限制
由於此漏洞在被報告後一段時間仍未推出正式補丁,且目前已有 Metasploit 模組可以自動化執行此攻擊鏈,管理者必須立即採取緩解措施。
建議的臨時解決方案如下: 首先,在 app.ini 設定檔中將 DISABLE_REGISTRATION 設為 true,禁止不信任的用戶隨意註冊帳號。 其次,將 MAX_CREATION_LIMIT 設為 0,限制用戶自行創建儲存庫,切斷攻擊者建立實驗環境的路徑。 最後,全面稽核所有儲存庫的合併設定,關閉不必要的 Rebase 合併功能。
值得注意的是,如果攻擊者使用創建並刪除臨時儲存庫的方式進行攻擊,伺服器日誌中可能只會留下一個 HTTP 500 錯誤,這使得偵測變得非常困難。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。