12年分のGitLabに影響する未認証RCE(CVE-2026-110264)
評価10.0の正規表現コンパイラーの整数オーバーフローCVE-2026-110264により、7.0以降のすべての自己管理型GitLabが未認証RCEにさらされます。2026年10月21日に修正されています。
要点
- CVE-2026-110264は、自己管理型GitLabの正規表現コンパイラーにある整数オーバーフローです。GitLabはCVSS v3.1の最高値10.0と評価しています。GitLabが公開していない条件下で、未認証の攻撃者が細工した正規表現を入力し、サーバー上で任意のコードを実行できます。
- 7.0(2014年)以降のすべての自己管理型GitLab CE/EEが影響を受けます。欠陥はRubyの正規表現エンジンOnigmoにあり、GitLabは自社パッケージ内に同梱してパッチを適用するためです。GitLabは2026年10月21日に7つのリリース系列を同時に修正し、通常の方針より古い版にもバックポートしました。
- 悪用は報告されておらず、CISA KEVカタログにも登録されていません。公開PoCはなく、GitLabは回避策も公開していません。前提条件が非公開のため、設定から影響なしと判断できる構成はなく、更新だけが確実な保護です。
- 19.5.1、19.4.3、19.3.6、19.2.9、19.1.9、19.0.10、18.11.13へすぐに更新してください。10月12日にCVE-2026-97229のパッチを適用した場合も再び影響範囲に入ります。それらのビルドは、新しい修正版より1パッチ古いためです。
影響を受けるか
次の両方を満たす場合に影響を受けます。
- omnibusパッケージ、Docker、Helmチャート、ソースインストールなど、いずれかの構成で自己管理型GitLab Community EditionまたはEnterprise Editionを使っている。GitLab.comは修正済みで、19.3.5-internal0および19.4.2-internal0以降のGitLab Dedicatedテナントも対応不要です。
- バージョンが影響範囲内。GitLabは攻撃者に必要な機能や設定を明らかにしていないため、修正版未満のインスタンスを設定で除外することはできません。
| ブランチ | 影響を受けるバージョン | 修正バージョン |
|---|---|---|
| 19.5 | 19.5.0 | 19.5.1 |
| 19.4 | 19.4.0~19.4.2 | 19.4.3 |
| 19.3 | 19.3.0~19.3.5 | 19.3.6 |
| 19.2 | 19.2.0~19.2.8 | 19.2.9 |
| 19.1 | 19.1.0~19.1.8 | 19.1.9 |
| 19.0 | 19.0.0~19.0.9 | 19.0.10 |
| 18.11および7.0までの全旧ブランチ | 7.0~18.11.12 | 18.11.13 |
ステージングやCI専用サーバーも含め、全インスタンスのバージョンを確認してください。Web画面ではHelpとAdmin Areaの概要に表示されます。ホストでは次を実行します。
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION # omnibus package install
docker exec gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION # Docker: adjust the container name
cat /home/git/gitlab/VERSION # source install
10月12日のCVE-2026-97229修正版である19.2.8、19.3.5、19.4.2も影響範囲内で、1パッチ上へ更新する必要があります。
修正方法
古いインスタンスではGitLabが文書化した更新経路に従い、各ブランチの修正バージョンへアップグレードします。7つの修正版のうち18.11.13、19.0.10、19.1.9、19.2.9の4つは、GitLabが重大な問題に限って行うバックポートです。通常の方針は直近3つの月次リリースだけを対象とします。
更新時間を計画してください。19.4.3と19.3.6には更新中に実行するデータベース移行があり、単一ノードのサーバーは完了まで停止します。複数ノードならGitLabの無停止手順でパッチを適用できます。19.4.3ではデプロイ後の移行も実行されます。
公開された回避策はなく、独自の対策の限界も明確にしておくべきです。前提条件が非公開なので、機能、登録、CI利用の制限は文書化された防御ではありません。到達できるユーザーをネットワークで制限すれば危険を減らせますが、GitLabが保証する修正ではありません。アップグレードが保護策です。
同じ10月21日のリリースは、他に10件を修正し、うち2件は重大度が高です。SAMLとLDAPの自動リンクが両方有効なとき、OmniAuthからLDAPへの自動リンクのメール検索を通じてアカウントを乗っ取れるCVE-2026-15723と、OAuthおよびOpenID ConnectのディスカバリーエンドポイントのキャッシュポイズニングCVE-2026-112212です。一度の更新ですべてに対応できます。
根本原因
GitLabはユーザーが提供する正規表現をコンパイルします。そのエンジンOnigmoは、2種類の内部識別子を上限のないカウンターで数えていたため、反復構文を十分に含むパターンで識別子が周回し、コンパイル済みプログラムが破損しました。
GitLabはRuby on Railsアプリケーションで、Ruby組み込みの正規表現エンジンはCライブラリのOnigmoです。GitLabはシステムのRubyではなく、独自にパッチを適用したRubyを同梱します。そのためOnigmoの弱点が7.0以降の全GitLabに入り、GitLabは同梱Rubyへのパッチとして修正を提供します。
Ruby自身のアドバイザリは、CVE-2026-110264の根本を「多数の反復を含むパターンにおける内部IDのオーバーフロー」と特定しています。上流のruby/rubyプルリクエスト#16801「Reject overflowed repeat/null-check IDs in huge regexps」の修正は、2行で仕組みを示します。Onigmoが(?:foobar){0,100}のような範囲反復をコンパイルすると、数値識別子を必要とする一対の仮想マシン命令を出力します。
r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
reg->num_repeat++;
+ if ((MemNumType)reg->num_repeat <= 0) return ONIGERR_TOO_MANY_RANGE_REPEAT;
追加行が欠けていたチェックです。IDはOnigmoでshort intと定義されたMemNumTypeに保存されます。符号付き16ビット整数で、最大値は32,767です。修正前のreg->num_repeatは上限との比較なしに増加し、32,767を超えると、IDとして書かれる値が負の値に周回しました。新チェックはカウンターをMemNumTypeへキャストし、ゼロ以下になった時点でコンパイルを停止して、周回したIDがプログラムへ届くのを防ぎます。空一致の検証が必要な構文をコンパイルするときに割り当てるヌルチェック識別子にも、同じ欠陥がありました。
r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
if (r) return r;
reg->num_null_check++;
+ if ((MemNumType)reg->num_null_check <= 0) return ONIGERR_TOO_MANY_NULL_CHECK;
この構文を非常に多く含む細工されたパターンは、カウンターを識別子の範囲外へ押し上げ、保存値を周回・衝突させます。追加された回帰テストは2つの発生形を示し、それぞれ一つのパターンで100,000回繰り返します。
'(?:foobar){0,100}' * 100000 # range repeats
'(?:(?:foo)?|(?:bar)?)*' * 100000 # constructs needing null checks
GitLabのアドバイザリは、このようなパターンのコンパイル中に生じる整数オーバーフローを、サーバー上の任意コード実行に変えられる可能性があるとしています。joaxcarの名で活動する研究者Johan CarlssonがGitLabのHackerOneバグバウンティを通じて報告しました。彼が1か月で発見したGitLabの正規表現エンジンのコード実行欠陥として4件目で、19.2より前にも届く初の欠陥です。
悪用の仕組み
エクスプロイトコードは非公開のため、以下は公開PoCではなく、アドバイザリ、上流パッチ、Rubyの入力経路の説明に基づきます。
- 攻撃者が、ユーザー提供のパターンをコンパイルするGitLab機能へ、細工した正規表現を入力します。GitLabはCI設定などのパターンをコンパイルしますが、この不具合に届く機能は公開していません。
- パターンは手入力ではなく生成されます。回帰テストの2つの形のように、量指定された構文を数万回繰り返します。
- コンパイル中に反復とヌルチェックの識別子カウンターが
MemNumTypeの範囲を超えて周回し、コンパイル済みプログラムに衝突する識別子が入ります。 - 破損したコンパイル状態がメモリ破壊を起こします。GitLabは、これをGitLabサーバープロセスとしてのコード実行に変えられる可能性があるとしています。
失敗や試行時に観測できる痕跡は、GitLabが公開した2つの検出ルールの対象です。どちらもオープンソースのTLDR検出フレームワーク内にあり、GitLabアプリケーションログを対象とするSigma形式で書かれています。
攻撃フロー
流れは短いものです。反復だらけの自動生成パターンがコンパイラーに届き、識別子が周回し、壊れたプログラムがワーカーをクラッシュさせるか、実行を攻撃者に渡します。
細工されたパターン"] --> B["ユーザーパターンをコンパイルする
GitLab機能へ入力"] B --> C["Onigmoが上限なしのカウンターから
OP_REPEATとヌルチェックのIDを付与"] C --> D["MemNumTypeの範囲を超える
境界チェックがなくIDが周回"] D --> E["ID衝突がコンパイル済み
プログラムを破損"] E --> F["ワーカーのクラッシュ、または
メモリ破壊からコード実行へ"]
攻撃者に可能なこと
- 認証なしにGitLabプロセスユーザーとしてサーバー上で任意コードを実行。CVSSベクトルのスコープはChangedで、脆弱なコンポーネントを超える影響も評価に含む
- GitLabプロセスが到達できるすべてにアクセス。リポジトリと履歴、CI/CD変数や保存済みシークレット、コンテナーとパッケージのレジストリ、インスタンスのホストなど
- CIを通じて侵入を拡大。ランナーは対象インスタンスで定義したジョブを実行するため、サーバー上のコード実行は、それを信頼する処理やマシンに影響可能
攻撃者にはGitLabのWebインターフェースへのネットワークアクセスと、非公開の前提条件が必要です。CVSSベクトルCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:Hでは認証不要で、ユーザー操作も示されていません。前提が非公開のため、インターネットから到達する自己管理インスタンスは危険にさらされていると扱うべきです。
修正が機能する理由
Rubyのプルリクエスト#16801は両カウンターのオーバーフローを防ぎます。各増分後にMemNumTypeへキャストし、値が周回していればエラーを返します。
/* regcomp.c, compile_range_repeat_node() */
if ((MemNumType)reg->num_repeat <= 0) return ONIGERR_TOO_MANY_RANGE_REPEAT;
/* regcomp.c, compile_tree_empty_check() */
if ((MemNumType)reg->num_null_check <= 0) return ONIGERR_TOO_MANY_NULL_CHECK;
regerror.cのメッセージと、新しいエラーコードONIGERR_TOO_MANY_RANGE_REPEAT(-224)、ONIGERR_TOO_MANY_NULL_CHECK(-225)により、識別子がオーバーフローするパターンは、コンパイル済みプログラムが存在する前にRegexpErrorとして拒否されます。衝突する識別子を生成できなくなり、破損経路が閉じます。この欠陥に対する修正は完全で、両方の発生形の回帰テストもあります。
注目すべきは提供方法です。上流修正は2026年4月29日にruby/rubyへマージされましたが、Rubyのリリースに入ったのは2026年10月23日のRuby 4.0.9、3.4.12、3.3.13が初めてです。アドバイザリはそれぞれの系列で初めて含む版と確認し、Ruby 4.0.8はこの修正を含まないと明記しています。GitLabは待ちませんでした。10月21日のパッケージに独自のバックポートを含め、19.2~19.5のビルドのリリースノートに「Add Ruby regexp repeat ID overflow patch for 3.3, 3.4 and 4.0」と掲載しています。古いブランチには以前の反復範囲修正も含みます。修正版GitLabを入れれば、同梱Rubyを通して修正が適用されます。
侵害されたかを確認する方法
CVE-2026-110264の悪用は報告されておらず、侵害指標もありません。2026年10月25日時点で、GitLabとCISAのカタログに実環境の活動は示されていません。
状況が変わるまでは、公開された2つの検出ルールと一般的な監視が利用できます。
- GitLabのSigmaルールOnigmoネイティブワーカーのクラッシュとOrg modeレンダリングエラーの急増は、GitLab自身のアプリケーションログを対象とし、悪用試行を調べるベンダー対応の方法です。
- 一般に、パターンのコンパイルに結び付くRubyワーカーの連続クラッシュ、Org modeレンダリングのエラー急増、GitLabサービスアカウントからの予期しない子プロセスや外向き接続が、成功または試行の兆候になります。見つかった場合はコード実行インシデントとして扱い、隔離、スナップショット取得、保持するシークレットのローテーション、安全なインストールからの再構築を行ってください。
経緯
- 2026-04-29:ruby/rubyプルリクエスト#16801「Reject overflowed repeat/null-check IDs in huge regexps」を上流にマージ。
- 2026-09-23:GitLabがjoaxcarによる最初の2つの正規表現エンジンの欠陥CVE-2026-89078、CVE-2026-93577を19.4.1で修正。どちらも9.9でアカウントが必要。
- 2026-10-12:GitLabが未認証の10.0の正規表現コンパイラーのオーバーフローCVE-2026-97229を、19.2.8、19.3.5、19.4.2で修正。
- 2026-10-21:GitLabが通常の方針を超えてバックポートし、CVE-2026-110264を19.5.1、19.4.3、19.3.6、19.2.9、19.1.9、19.0.10、18.11.13で修正。
- 2026-10-22:CVSS v3.1 10.0の評価でCVE-2026-110264を公開。
- 2026-10-23:Rubyが根本のOnigmo修正を含む4.0.9、3.4.12、3.3.13を公開し、各GitLab CVEの原因を特定するアドバイザリを公開。
- 2026-10-25:本記事を公開。
よくある質問
10月12日にCVE-2026-97229を修正したので安全か?
いいえ。10月12日の19.2.8、19.3.5、19.4.2はCVE-2026-110264の影響範囲内です。修正版は1パッチ上の19.2.9、19.3.6、19.4.3です。前の欠陥は19.2より前には及びませんでしたが、今回は異なります。以前何を適用したかにかかわらず、全自己管理インスタンスに10月21日のリリースが必要です。
GitLab.comやGitLab Dedicatedも影響を受けるか?
いいえ。GitLab.comは修正済みで、内部リリース19.3.5-internal0および19.4.2-internal0以降のGitLab Dedicatedにも修正が含まれます。危険があるのは、あらゆる構成の自己管理型CEとEEです。
攻撃者にはどのGitLab機能が必要か?
GitLabは前提条件を公開しておらず、設定から影響なしと判断する文書化された方法はありません。GitLabはCI設定のパターンなどユーザー提供の正規表現をコンパイルし、公開検出ルールはOnigmoワーカーのクラッシュとOrg modeレンダリングエラーの急増を監視します。インターネットから届く自己管理インスタンスは、パッチ適用まで危険にさらされていると扱ってください。
自社RubyアプリはRegexp.timeoutやパターン長制限で保護できるか?
いいえ。RubyのアドバイザリはRegexp.timeoutでは防げず、一部の不具合は短いパターンでも起きるため長さ制限も信頼できないとしています。Regexp.new、Regexp.union、Regexp.compile、正規表現リテラルへの展開で攻撃者の文字列をコンパイルするアプリは、Rubyを更新し、信頼できないパターンのコンパイルをやめるべきです。
CVEスキャナーは脆弱なRubyを検出するか?
RubyのCVE識別子からは検出できません。Rubyは少なくとも現時点でCVEを申請しておらず、GitLabの4つのCVE番号を追跡するよう案内していますが、そのレコードは影響製品としてGitLabだけを挙げています。Rubyはバージョンで追跡してください。4.0.9、3.4.12、3.3.13は修正済み、4.0.8にはCVE-2026-110264の修正がなく、3.2以前は修正なしでサポート終了です。
単一ノードサーバーでの更新の負担は?
19.4.3と19.3.6にはGitLabの起動前に完了する必要があるデータベース移行が含まれ、単一ノードでは停止時間が生じます。複数ノードならGitLabの無停止手順で適用でき、19.4.3は更新後にデプロイ後の移行も実行します。
攻撃者より先に未修正GitLabを発見
Ostorlabで外部アセットとコンテナーイメージをスキャンし、2026年10月21日のリリースより前の版を使う全自己管理型GitLabを確認してください。注意が向きにくいステージングやCI専用サーバーも含めます。
参考資料
- 2026年10月21日のGitLab Critical Patch Release 19.5.1、19.4.3、19.3.6、19.2.9、19.1.9、19.0.10、18.11.13。CVE-2026-110264の説明、CVSS 10.0ベクトル、影響範囲、バックポート、joaxcarへの謝辞、検出リンク、移行の注意を含む:https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-5-1-released/ (2026年10月25日確認)
- 影響範囲とHackerOne報告への参照を含むCVE-2026-110264レコード:https://cveawg.mitre.org/api/cve/CVE-2026-110264 (2026年10月25日確認)
- 2026年10月23日のRubyアドバイザリ「Regexp compilation fixes related to GitLab's CVE-2026-89078, CVE-2026-93577, CVE-2026-97229 and CVE-2026-110264」。CVE別の不具合表、影響入力、回避策の制限、謝辞を含む:https://www.ruby-lang.org/en/news/2026/10/23/regexp-fixes-for-gitlab-cves/ (2026年10月25日確認)
- 2026年4月29日マージのruby/rubyプルリクエスト#16801「Reject overflowed repeat/null-check IDs in huge regexps」。2つのカウンターチェック、新エラーコード、回帰テストを含む:https://github.com/ruby/ruby/pull/16801 (2026年10月25日確認)
- 2026年10月23日のRuby 4.0.9リリース。CVE-2026-110264を修正した初の4.0リリース:https://www.ruby-lang.org/en/news/2026/10/23/ruby-4-0-9-released/ (2026年10月25日確認)
- 2026年10月23日のRuby 3.4.12と3.3.13リリース:https://www.ruby-lang.org/en/news/2026/10/23/ruby-3-4-12-released/ および https://www.ruby-lang.org/en/news/2026/10/23/ruby-3-3-13-released/ (2026年10月25日確認)
- リリースの不具合修正一覧にある、19.5ビルドにRuby正規表現の反復IDオーバーフローパッチを追加するGitLab omnibusマージリクエスト:https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/9922 (2026年10月25日確認)
- TLDRフレームワークのSigma形式GitLab検出ルール「Onigmo native worker crash」:https://gitlab.com/gitlab-security-oss/tldr/-/blob/main/Detections/platforms/GitLab/Vulnerability%20Detections/onigmo_native_worker_crash.md (2026年10月25日確認)
- TLDRフレームワークのSigma形式GitLab検出ルール「Org mode render error burst」:https://gitlab.com/gitlab-security-oss/tldr/-/blob/main/Detections/platforms/GitLab/Vulnerability%20Detections/org_mode_render_error_burst.md (2026年10月25日確認)
- CVE-2026-110264のHackerOne報告、参照4093475:https://hackerone.com/reports/4093475 (CVEレコードから参照、2026年10月25日確認)
- The Hacker News、「Critical GitLab Flaw (CVSS 10.0) Could Allow Unauthenticated RCE Across 12 Years of Releases」、2026年10月21日。修正版一覧、10月12日適用者の再影響、更新時停止の詳細:https://thehackernews.com/2026/10/critical-gitlab-flaw-cvss-100-could.html (2026年10月25日確認)
- The Hacker News、「Ruby Fixes Three Regex Engine Bugs Responsible for Four Critical GitLab RCE Flaws」、2026年10月23日:https://thehackernews.com/2026/10/ruby-fixes-three-regex-engine-bugs.html (2026年10月25日確認)
- 10月12日に19.2.8、19.3.5、19.4.2で修正された関連CVE-2026-97229:https://www.cve.org/CVERecord?id=CVE-2026-97229 (2026年10月25日確認)
- GitLabの無停止アップグレード文書:https://docs.gitlab.com/update/zero_downtime/ (2026年10月25日確認)
- 古いバージョンからのGitLabアップグレード経路:https://docs.gitlab.com/update/ (2026年10月25日確認)
- CISA Known Exploited Vulnerabilitiesカタログ。2026年10月25日に対象CVEが未登録であることを確認:https://www.cisa.gov/known-exploited-vulnerabilities-catalog