0x00 概述
今日git 和git for window相繼發佈最新版本Git 2.17.1、Git for Windows 2.17.1主要用於解決git的一個嚴重漏洞(非史詩級):CVE-2018-11235
該漏洞允許在運行'git clone --recurse-submodules'(或已棄用的git clone --recursive)時可實現任意代碼的執行。惡意倉庫可以包含指向倉庫外部的.git modules子模塊配置文件。 當git克隆這樣一個倉庫時,它可以被誘騙到克隆子模塊內(非.git目錄)的hook,從而實現任意代碼執行
0x01 bug詳解
當Git倉庫包含子模塊時,為了編譯項目管理,子模塊的倉庫結構與.git文件夾內的父級倉庫結構可以存在一起。子模塊的倉庫結構通常存儲在與子模塊名稱相同的文件夾中,但此文件夾的名稱可由父倉庫中的文件配置。
問題版本的git允許配置中包含不一定屬於.git目錄的路徑。導致攻擊者可以精心設計創建一個擁有另一個Git倉庫的父倉庫,作為該父倉庫內的一個文件夾。然後,該倉庫可以作為子模塊添加到父倉庫。該子模塊的位置可以配置非.git文件夾,指向父倉庫本身內的簽入倉庫。
當遞歸clone這個父倉庫時,Git會檢查已配置的子模塊,然後查找存儲該子模塊庫的位置。它將遵循父倉庫本身的配置,檢入倉庫。該倉庫將用於檢出子模塊,由於沒有過濾導致該檢入倉庫中的任何hook腳本將運行。
因此,攻擊者可以將這個倉庫配置與一個惡意的post-checkout腳本捆綁在一起,當代碼倉庫遞歸clone是會觸發執行。
0x11漏洞影響
0x1101 Git託管商
由於,實際中大多數人依賴託管服務提供商(比如Github)來存儲代碼,因此可通過服務託管商簡單地阻止倉庫來阻止此漏洞擴散。據悉目前 Visual Studio Team Services、GitLab和Github都是會主動阻止任何試圖在.git目錄之外設置git子模塊的倉庫。
0x1102 Git客戶端
阻止託管提供程序中的惡意倉庫可以有效的限制攻擊媒介源,但是不排除有其他的託管商以及其他惡意利用的途徑(比如假冒個github站點等)。所以蟲蟲建議儘快升級git客戶端。
0x12漏洞檢測
漏洞的檢查也非常簡單,你可以通過運行如下腳本來檢查git是否存在問題:
新建一個臨時目錄運行它:
mkdir chongchongtemp && cd chongchongtemp
git init test && \
cd test && \
git update-index --add --cacheinfo 120000,e69de29bb2d1d6434b8b29ae775ad8c2e48c5391,.gitmodules
注意:該命令不會將克隆任何倉庫,也沒有任何危險的指令。
如果顯示為:
error: Invalid path '.gitmodules'fatal: git update-index: --cacheinfo cannot add .gitmodules
你的版本不受該漏洞的影響。
如果你的git顯示以下信息,並且創建了一個空倉庫,那麼你的版本有問題。
0x13漏洞解決
windows:
從gitforwindows獲取最新版本的Git for Windows(2.17.1版)。
macOS
蘋果通過用Xcode發佈Git,但是沒有定期更新機制。因此,你需要一個第三方包管理器來實現更新。 在此蟲蟲推薦你使用Homebrew包管理器。
如果你還沒有安裝過Homebrew,你需要首先安裝它。
然後,你可以使用Homebrew來安裝和更新git:
brew install gitbrew update git
Linux(Debian,Ubuntu)
如果你使用的發行版為Ubuntu或Debian,可能很快就會有更新包發佈,注意更新。
Redhat,CentOS:
sudo yum update git
Debian,Ubuntu:
sudo apt-get update git
源碼更新
在不提供包管理器或者包管理器不支持直接升級的你需要自己下載源碼包編譯安裝。
閱讀更多 蟲蟲安全 的文章