GIT 的整數切取與溢位弱點(CVE-2016-2315、CVE-2016-2324)
Red Hat 產品安全部門已得知 GIT 中的弱點,其中的整數切取弱點(CVE-2016-2315)與整數溢位弱點(CVE-2016-2324)會導致以堆疊為基礎的緩衝區溢位,並導致遠端執行程式碼。
總覽
GIT 使用特別的格式,在伺服器與客戶端交換軟體庫資訊。這已知是「packfile」格式。
攻擊者可以用特別建立的 packfile,在送往有弱點的伺服器或客戶端時,在處理時能啟動整數切取或溢位,最後導致記憶體損毀。
背景
GIT 是分散式版本控制系統,有著去中心化的架構。與中心化的版本控制系統(客戶端—伺服器模式)相比,GIT 能確定每個 GIT 軟體庫的工作版本都是一樣的複製版本,有著完整的歷史。這不僅允許使用者工作、貢獻專案,而不需要有推送變更至官方軟體庫的權限,也允許使用者在沒有網路連線時運作。
受影響的版本
Red Hat 已發佈且支援的 Red Hat Enterprise Linux(RHEL)與 Red Hat 軟體集(Red HAt Software Collection)之 GIT 版本都受到影響,如〈解決方案〉一節所述之產品。除此之外,所有上游的 GIT 版本(2.4.11、2.5.5、2.6.6、2.74 之前)都會受到這些漏洞的影響。
攻擊的描述與衝擊
這些弱點的成因是「revision.c」原始檔的「path_name()」函數中,整數切取與整數溢位的問題,這函數會由 GIT 所取用來處理路徑資訊。這函數的弱點無法完整乾淨地處理可能收到的惡意資料,這些惡意資料是攻擊者所特別製造、發送的 GIT packfile;這可能會導致記憶體損毀,並可能執行惡意程式碼。
packfile 格式會由 GIT 的內部使用,以有效率地交換軟體庫資訊。GIT 使用多種 helper 工具來產生 packfile,並在 GIT 的端點上發送、收取這些 packfile;而攻擊者可以使用特別製造的 packfile,其中包含了長路徑名稱(231 位元組,大約是 2 GByte)或是路徑元素的樹,可以在處理「path_name()」函數時,啟動這些弱點。
這樣的 packfile 已被人建立、且公諸於世。這可以用來攻擊用戶端與伺服器端。
為了要攻擊有此弱點的伺服器,攻擊者必須要裝作是 GIT 用戶端,並發送特別製造的 packfile 至有弱點的伺服器端,例如是「push」操作的一部份。有弱點的伺服器會收到來自惡意的 GIT 用戶端之惡意 packfile,同時在處理所包含的路徑資訊時,啟動「path_name()」函數的弱點。通常,這種操作需要身分認證。攻擊者必須成功地通過身分認證,才能讓攻擊成功。
要攻擊客戶端,攻擊者要設定 GIT 伺服器之惡意 GIT 軟體庫,並欺騙對此不懷疑的使用者複製這個軟體庫。用戶端會從伺服器上下載惡意的 packfile,然後在試圖處理這 packfile 時啟動這弱點。
雖然原始、未壓縮的 packfile 大概需要 2 GBytes(因為這需要大量的路徑資料),這並不表示攻擊者必須要在網路上發送好幾個 GBytes 的資料。由於 packfile 格式內部所使用的壓縮方式,以及根據傳輸機制(例如 SSH)所使用的壓縮方式,可能只需要 200 MBytes 的網路傳輸資料就可以實現這弱點。
解決方法
建議所有 GIT 使用者升級這些套件,其中包含了向後支援的升級檔,以修正這些問題。在套用這項更新前,請確定可套用至您系統的相關勘誤檔已經套用至系統上。
| 產品 | 套件 | 建議 |
|---|---|---|
| Red Hat Enterprise Linux 6 | git | [RHSA-2016-0496](https://rhn.redhat.com/errata/RHSA-2016-0496.html) |
| Red Hat Enterprise Linux 7 | git | [RHSA-2016-0496](https://rhn.redhat.com/errata/RHSA-2016-0496.html) |
| Red Hat 軟體集 | git19-git | [RHSA-2016-0497](https://rhn.redhat.com/errata/RHSA-2016-0497.html) |
常見問題集
我有一台 GIT 伺服器。這有什麼影響?
如果攻擊者能推送惡意資料至 GIT 軟體庫,這台伺服器就會暴露在弱點下。如果這需要身分認證,攻擊者就必須成功地通過身分認證才行。
我有一台 GIT 用戶端。這有什麼影響?
攻擊者會欺騙使用者,複製不受信任或受侵害的 GIT 軟體庫,而暴露在此弱點下。
