要点
影響バージョン
- 自前運用のGitLab CE/EE、7.0以降すべて。修正版は 19.5.1、19.4.3、19.3.6、19.2.9、19.1.9、19.0.10、18.11.13(2026年10月21日)。
- 10月12日の修正版(19.4.2、19.3.5、19.2.8)は対象のまま。GitLab.comと対象版のGitLab Dedicatedは対応済み。
今すぐやること
- 自前運用のGitLabを上記の修正版へ更新する。特にインターネットに公開しているものと、公開プロジェクトを許しているものを先に更新する。
- GitLabが公開した2つの検知ルールで、
.orgファイルの描画タイムアウトの急増やワーカーのクラッシュがないか、ログをさかのぼって確認する。
何が起きているか
事実(GitLab)
- GitLabは2026年10月21日、自前運用のGitLab CE/EE向けに臨時の重大パッチを出した。最重要のCVE-2026-110264は、細工した正規表現をコンパイルするときの整数オーバーフローで、条件によっては認証なしの利用者がGitLabサーバー上で任意のコードを実行できる。CVSS 3.1は10.0(
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)。報告者はHackerOne経由の研究者joaxcar。 - 同じリリースで、OmniAuthからLDAPへの自動ひも付けでの認証不備、OAuth/OIDCのディスカバリーエンドポイントのキャッシュ汚染(いずれもHigh)なども直っている。
- GitLabは、自前運用の利用者向けに検知ルール2本(「Onigmo native worker crash」「Org mode render error burst」)を公開した。
事実(GitLabの検知ルールの解説)
- GitLabは
.org(Emacs Org-mode)ファイルをorg-rubygem(0.9.12)で描画する。このgemは、ファイル中の#+TODO:(#+SEQ_TODO:・#+TYP_TODO:も同じ)行に書かれた独自キーワードを、エスケープせずにRegexp.new("^#{keyword}\\s*")へ埋め込む。 - キーワードに32,767を超える繰り返し指定を入れると、Rubyの正規表現エンジンOnigmoが振る繰り返しIDが符号付き16ビットの上限を超えて負に巻き戻り、照合時に範囲外書き込みが起きる。リクエスト本体でヒープを整えると、
gitユーザーとしてsystem()を呼べる。 - 必要なのは
.orgファイルを置ける公開プロジェクト1つだけで、認証はいらない。攻撃は何度も試す必要があり、描画タイムアウト(exceptions_json.logのTimeout::Error)やワーカーの異常終了(Workhorseの502)がまとまって出る。
事実(PoCの状況)
- 10月22日、Onigmoの繰り返しIDの巻き戻りでRuby 3.4.11(GitLab同梱と同じ系列)がクラッシュすることを再現するPoCと、同梱Rubyが修正済みかを判定するスクリプトが公開された(Sploitusに掲載)。作者は、GitLabでのコード実行までは示していないとしている。
- 実際の悪用の報告は、本稿執筆時点(10月23日)で見つけられなかった。CISAの悪用確認済み脆弱性カタログ(KEV)にも入っていない。
影響を受ける製品・バージョン
| 系列 | 影響を受ける範囲 | 修正版 |
|---|---|---|
| 7.0〜18.11 | 18.11.13より前 | 18.11.13 |
| 19.0 | 19.0.10より前 | 19.0.10 |
| 19.1 | 19.1.9より前 | 19.1.9 |
| 19.2 | 19.2.9より前 | 19.2.9 |
| 19.3 | 19.3.6より前 | 19.3.6 |
| 19.4 | 19.4.3より前 | 19.4.3 |
| 19.5 | 19.5.1より前 | 19.5.1 |
- Omnibus、ソース、Helmチャートなど、配布形態を問わず対象(GitLabは配布形態の指定がない場合はすべてが対象としている)。
- GitLab.comは対応済み。GitLab Dedicatedは 19.3.5-internal0、19.4.2-internal0 以降なら対応不要。
修正版・回避策
- 修正版は上の表のとおり。18.11〜19.2の古い系列にもバックポートされている。
- GitLabの公告に回避策の記載はない。
今すぐやること
- 自前運用のGitLabのバージョンを確認し、修正版へ更新する。10月12日のCVE-2026-97229の修正版を当てた環境も、もう一度更新が必要。
- 更新までの間に公開プロジェクトや外部からの新規登録を許している場合は、それらが攻撃の足場になることを前提に優先度を上げる(考察)。
- GitLabの検知ルールにならい、
exceptions_json.logでOtherMarkupの.orgファイル描画タイムアウトが1つの接続元から短時間に5回以上出ていないか、Workhorseのログで.orgのblob表示に502が続いていないか、puma_stderr.logにOnigmo・org-rubyのクラッシュがないかを確認する。 - リポジトリ内に、極端に長い
#+TODO:行を持つ.orgファイルがないかを探す。
考察
- 同じエンジン、別の入口: 10月12日のCVE-2026-97229(前回の記事)もOnigmoの桁あふれで、入口はCI/CD設定だった。今回の入口は
.orgファイルの描画で、利用者がログインせずに閲覧できる画面から届く。GitLabが対象を7.0(2014年)以降すべてとしているのは、org-rubyとOnigmoの組み合わせが長く使われてきたためと読める。 - 「先週更新したから大丈夫」が通じない: 10日あまりで同じ研究者から同じ種類のCVSS 10が2件続いた。10月12日版で止めている環境は、今回の欠陥をそのまま抱えている。更新の手間を理由に片方だけ当てる判断は危ない。
- 悪用までの距離: 公開済みのPoCはクラッシュまでで、コード実行にはヒープの調整が要る。GitLab自身も攻撃は試行回数が多く騒がしいと書いている。そのぶん、ログに跡が残りやすい。更新と同時に、過去ログの確認をしておく価値がある。
- GitLab以外も: PoCの作者は、配布されているRuby本体(3.3、3.4、4.0)はまだ直っておらず、修正はRubyの開発版にのみ入っていると書いている(本稿ではRuby側の公告は確認できていない)。利用者が書いた文字列を正規表現としてRubyでコンパイルするサービスは、同じ問題を抱える可能性がある。
出典
- 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(GitLab、2026-10-21)
- Org mode render error burst 検知ルール(GitLab Security)
- NVD CVE-2026-110264
- GitHub Advisory GHSA-83vq-rvff-66gw
- CERT-EU Security Advisory 2026-019
- CSA Singapore AL-2026-152
- PoC(Sploitus掲載、2026-10-22)