Git 由於在處理子模組程式碼庫的設定檔案存在漏洞,導致開發者可能遭受任程式碼執行攻擊,多數程式碼託管服務皆已設定拒絕有問題的程式碼儲存庫,但建議使用者儘快更新,避免不必要的風險。
Microsoft Visual Studio 團隊服務專案經理 Edward Thomson May 在 DevOps 部落格中提到,Git 社群最近發現 Git 存在一個漏洞,允許駭客執行任意程式碼。 他敦促開發人員儘快更新客戶端應用程式。 微軟還採取了進一步措施,防止惡意程式碼庫被推入微軟的 VSTS(Visual Studio Team Services)。
此程式碼是 CVE 2018-11235 中的一個安全漏洞。 當使用者在惡意程式碼庫中操作時,他們可能會受到任意程式碼執行攻擊。 遠端程式碼儲存庫包含子模組定義和資料,它們作為資料夾捆綁在一起並提交給父程式碼儲存庫。 當這個程式碼倉庫被來回複製時,Git 最初會將父倉庫放到工作目錄中,然後準備複製子模組。
但是,Git 稍後會發現它不需要複製子模組,因為子模組之前已經提交給父儲存庫,它也被寫入工作目錄,這個子模組已經存在於磁碟上。 因此,Git 可以跳過抓取檔案的步驟,並直接在磁碟上的工作目錄中使用子模組。
但是,並非所有檔案都可以被複制。 當客戶端複製程式碼庫時,無法從伺服器獲取重要的配置。 這包括 .git 或配置檔案的內容。 另外,在 Git 工作流中的特定位置執行的鉤子(如Git)將在將檔案寫入工作目錄時執行 Post-checkout 鉤子。
不應該從遠端伺服器複製配置檔案的一個重要原因就是,遠端伺服器可能提供由 Git 執行的惡意程式碼。
CVE 2018-11235 的漏洞正是犯了這個錯誤,所以 Git 有子模組來設定漏洞。 子模組儲存庫提交給父儲存庫,並且從未實際複製過。 子模組儲存庫中可能存在已配置的掛鉤。 當使用者再次出現時,惡意的父庫會被精心設計。 將寫入工作目錄,然後 Git 讀取子模組,將這些子模組寫入工作目錄,最後一步執行子模組儲存庫中的任何 Post-checkout 掛鉤。
為了解決這個問題,Git 客戶端現在將更仔細地檢查子資料夾資料夾名稱。 包含現在非法的名稱,並且它們不能是符號連結,因此這些檔案實際上必須存在於 .git 中,而不能位於工作目錄中。
Edward ThomsonMay 提到,Git,VSTS 和大多數其他程式碼託管服務現在拒絕使用這些子模組配置的儲存庫來保護尚未更新的 Git 客戶端。 Git 2.17.1 和 Windows 的 2.17.1 客戶端軟體版本已經發布,微軟希望開發人員儘快更新。
來源:iThome