GitLab 正規表示式編譯器整數溢位,免登入 RCE(CVSS 10.0)
GitLab 官方修補公告 · 2026-10-12
CVE-2026-97229 讓攻擊者不需要任何帳號,只靠一段精心構造的 CI/CD 設定中的正規表示式,就能在 GitLab 伺服器上執行任意程式碼。GitLab 在 2026-10-12 的修補版本中把它評為 Critical,CVSS 3.1 為 10.0,向量 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H,是 CVSS 的滿分。
問題出在 CI/CD 設定檔裡負責解析、編譯並評估正規表示式的元件,弱點類型是整數溢位(CWE-190)。研究員 joaxcar 透過 HackerOne 通報。
漏洞機制
GitLab 的 pipeline 設定(例如 rules、only/except 一類的條件)允許寫入正規表示式,伺服器端必須先把這些字串編譯成可執行的匹配結構。CVE-2026-97229 發生在這個編譯階段:官方公告的說法是「insufficient regex validation」,也就是輸入的正規表示式沒有被充分驗證,才導致整數溢位。
整數溢位通常會讓長度或索引計算出錯,進而影響記憶體配置與寫入範圍。不過官方公告與 BleepingComputer 報導都沒有公開具體的溢位位置、元件名稱或 exploit 手法,公告只寫「在某些條件下」(under certain conditions)即可被利用,因此本文不推測細節。
攻擊門檻極低:向量中 PR:N 表示不需權限,UI:N 表示不需使用者操作,S:C 表示影響範圍會跨出原本的安全邊界。
受影響版本
GitLab Community Edition(CE)與 Enterprise Edition(EE)皆受影響:
| 分支 | 受影響 | 修補版本 |
|---|---|---|
| 19.2 | 19.2.8 之前 | 19.2.8 |
| 19.3 | 19.3.5 之前 | 19.3.5 |
| 19.4 | 19.4.2 之前 | 19.4.2 |
19.3 分支的修補版本號有出入:GitLab 官方公告寫 19.3.5,BleepingComputer 寫 19.3.4。本文以官方公告為準,實際升級前請再對照你下載的 release。
修補與緩解
官方沒有列出任何 workaround,唯一的處置是升級到上表的修補版本。這次同一份公告共列出 24 項安全修補,除了本漏洞還有 23 項,建議升級時一併消化。
- 自架(self-managed)CE/EE:立即升級;報導指出 GitLab.com 已修補、GitLab Dedicated 客戶不需動作。
- 版本低於 19.2 的實例:公告只列出 19.2 至 19.4 三個分支,更舊版本是否受影響公告未說明,不能據此視為安全,應該先升級到受支援分支再確認。
- 可從外網連到的實例:因為不需認證,暴露在公網或能被不受信任網段連到的 GitLab 風險最高,應排在升級順序最前面。
目前公告與報導都沒有說這個 CVE 已被實際利用;報導中提到的 CISA KEV 條目屬於另一個 GitLab 漏洞 CVE-2026-85706。但 CVSS 10.0、免認證、細節未公開的組合,通常意味著修補差異被逆向後很快會出現 exploit,因此不建議等待。
影響範圍
最該行動的是維運自架 GitLab 的平台團隊:確認每個實例落在 19.2、19.3 或 19.4 哪一個分支,並檢查它是否已升到 19.2.8、19.3.5、19.4.2 以上。若 GitLab 實例同時保存部署金鑰、CI 變數與 runner 註冊 token,一旦伺服器被接管,這些祕密都應視為外洩風險,升級之後要評估是否輪替。
只使用 GitLab.com 的團隊不需要升級,但若你在專案中把含有可疑正規表示式的設定當成檢查項目,目前沒有公開的特徵可供比對,無法據此做偵測。