Git 專案在 11 月 10 日發布了一組維護版本,一次修掉 6 個漏洞。最重的是 CVE-2026-111760:用 git clone --recurse-submodules 複製一個由攻擊者控制的儲存庫,可能在你的機器上執行對方的程式碼,GitHub 的安全公告給它評 8.0 分(高危)。Git 專案說,2.27.0 以後的所有版本都受影響。修復版本是 2.50.2、2.51.3、2.52.1、2.53.1、2.54.1、2.55.1 和 2.56.1;比 2.50 更老的版本同樣受影響,但已經不再出維護版本。

六個漏洞各在什麼時候觸發

  • CVE-2026-111760:Git 把檔案路徑的長度存在一個 32 位元欄位裡。攻擊者構造一個極長的路徑,它能通過路徑安全檢查,寫到磁碟時卻被截成 .git。新複製的子模組裡 .git 是一個檔案,會被換成指向惡意目錄的符號連結,那裡面的掛鉤或設定隨後被執行。觸發條件是對攻擊者控制的儲存庫做遞迴複製。
  • CVE-2026-113408:惡意伺服器在 v2 協定裡把 HEAD 指向帶 ../ 的名字,之後你執行 git commit 時,Git 會把內容寫到參照目錄以外的檔案。
  • CVE-2026-114467:標籤的說明裡帶有超過兩個 GPG 簽名時,git merge 會寫壞堆疊記憶體,可以造成拒絕服務。
  • CVE-2026-114469:一個解壓後遠超 1 GiB 的二進位修補檔能繞過大小檢查,git apply 時越界讀取並崩潰。
  • CVE-2026-105437:三方合併程式碼裡的堆積溢位,由 .gitattributes 裡超大的 conflict-marker-size 加上大量衝突觸發,merge、rebase、cherry-pick 和 merge-tree 都會走到這段程式碼。
  • CVE-2026-114466:git fast-import 的幾個功能可以讀寫任意檔案,現在預設停用,確實要用得加 --allow-unsafe-features。這是一個不向後相容的改動。

跟伺服器有什麼關係

  • 部署指令碼和 CI:很多指令碼裡寫著遞迴複製。Git 專案說,這種惡意儲存庫過不了主流託管平台的檢查,很難直接推上去,但它可以放在攻擊者自己的伺服器上,只要一個看起來正常的 .gitmodules 指過去就夠了。也就是說,風險來自你引用的第三方儲存庫裡的子模組。
  • 自建 Git 託管服務:託管服務會在伺服器端替使用者檢查能否合併。公告提到,合併裡的那個堆積溢位在 GitLab 上可以進一步升級為遠端程式碼執行。GitHub 說 github.com 已經修好,GitHub Enterprise Server 的修復版本是 3.19.15、3.20.11、3.21.9 和 3.22.4。
  • 發行版自帶的 Git:截至 11 月 12 日,Debian 12 的 2.39.5 和 Debian 13 的 2.47.3 仍標為 vulnerable。版本老並不等於安全,Ubuntu 22.04 自帶的 2.34.1 按上游給的範圍同樣在受影響之列,要等發行版把修復回補進來。

現在能做的

先用 git --version 看版本,發行版的修正套件一到就升級,自帶一份 Git 的應用程式也要跟著升級。在修補程式裝上之前,GitHub 給的建議是:只從信任的伺服器複製;不要對不信任的儲存庫做遞迴複製;不要合併不信任的內容和標籤;不要處理來路不明的二進位修補檔和 fast-import 資料流。GitHub 同時說明,這些做法不能代替安裝修復。同類的供應鏈風險,我們在npm 蠕蟲那篇報導裡講過;用 Git 拉程式碼部署的典型流程見部署 Node.js 應用程式和Docker 入門;懷疑部署機已經執行過不明程式碼,按入侵排查與安全加固處理。