Git 爆任意代碼執(zhí)行漏洞,所有使用者都受影響
Git 由于在處理子模塊代碼庫的設(shè)置檔案存在漏洞,導(dǎo)致開發(fā)者可能遭受任代碼執(zhí)行攻擊,多數(shù)代碼托管服務(wù)皆已設(shè)置拒絕有問題的代碼儲存庫,但建議使用者盡快更新,避免不必要的風(fēng)險。
Microsoft Visual Studio 團(tuán)隊服務(wù)項目經(jīng)理 Edward Thomson May 在 DevOps 博客中提到,Git 社區(qū)最近發(fā)現(xiàn) Git 存在一個漏洞,允許黑客執(zhí)行任意代碼。 他敦促開發(fā)人員盡快更新客戶端應(yīng)用程序。 微軟還采取了進(jìn)一步措施,防止惡意代碼庫被推入微軟的 VSTS(Visual Studio Team Services)。
此代碼是 CVE 2018-11235 中的一個安全漏洞。 當(dāng)用戶在惡意代碼庫中操作時,他們可能會受到任意代碼執(zhí)行攻擊。 遠(yuǎn)程代碼存儲庫包含子模塊定義和數(shù)據(jù),它們作為文件夾捆綁在一起并提交給父代碼存儲庫。 當(dāng)這個代碼倉庫被來回復(fù)制時,Git 最初會將父倉庫放到工作目錄中,然后準(zhǔn)備復(fù)制子模塊。
但是,Git 稍后會發(fā)現(xiàn)它不需要復(fù)制子模塊,因為子模塊之前已經(jīng)提交給父存儲庫,它也被寫入工作目錄,這個子模塊已經(jīng)存在于磁盤上。 因此,Git 可以跳過抓取文件的步驟,并直接在磁盤上的工作目錄中使用子模塊。
但是,并非所有文件都可以被復(fù)制。 當(dāng)客戶端復(fù)制代碼庫時,無法從服務(wù)器獲取重要的配置。 這包括 .git 或配置文件的內(nèi)容。 另外,在 Git 工作流中的特定位置執(zhí)行的鉤子(如Git)將在將文件寫入工作目錄時執(zhí)行 Post-checkout 鉤子。
不應(yīng)該從遠(yuǎn)程服務(wù)器復(fù)制配置文件的一個重要原因就是,遠(yuǎn)程服務(wù)器可能提供由 Git 執(zhí)行的惡意代碼。
CVE 2018-11235 的漏洞正是犯了這個錯誤,所以 Git 有子模塊來設(shè)置漏洞。 子模塊存儲庫提交給父存儲庫,并且從未實際復(fù)制過。 子模塊存儲庫中可能存在已配置的掛鉤。 當(dāng)用戶再次出現(xiàn)時,惡意的父庫會被精心設(shè)計。 將寫入工作目錄,然后 Git 讀取子模塊,將這些子模塊寫入工作目錄,最后一步執(zhí)行子模塊存儲庫中的任何 Post-checkout 掛鉤。
為了解決這個問題,Git 客戶端現(xiàn)在將更仔細(xì)地檢查子文件夾文件夾名稱。 包含現(xiàn)在非法的名稱,并且它們不能是符號鏈接,因此這些文件實際上必須存在于 .git 中,而不能位于工作目錄中。
Edward ThomsonMay 提到,Git,VSTS 和大多數(shù)其他代碼托管服務(wù)現(xiàn)在拒絕使用這些子模塊配置的存儲庫來保護(hù)尚未更新的 Git 客戶端。 Git 2.17.1 和 Windows 的 2.17.1 客戶端軟件版本已經(jīng)發(fā)布,微軟希望開發(fā)人員盡快更新。