Web・セキュリティ
Ruby 4.0.9 / 3.4.12 / 3.3.13公開|GitLabでRCEにつながった正規表現バグを修正
2026年10月23日、Ruby公式は Ruby 4.0.9 / 3.4.12 / 3.3.13 を公開しました。
今回の更新では、Rubyの正規表現エンジン Onigmo にある複数の不具合が修正されています。これらはGitLabが調査した結果、GitLabサーバー上でリモートコード実行(RCE)につながり得ることが確認された問題です。
ただし、ここは誤解しやすいところです。
Rubyを使っているだけで外部から即RCEされる、という話ではありません。
Ruby公式は、攻撃者が制御できる文字列をアプリケーションがRegexp.new、Regexp.union、Regexp.compileなどで正規表現としてコンパイルする場合に、これらのバグへ到達すると説明しています。
この記事はRuby公式の2026年10月23日付告知をもとに整理しています。GitLabが付与したCVEはGitLab側の脆弱性識別子であり、Rubyプロジェクト自身は現時点でこれらのRuby側バグについて独自CVEを申請していません。
先に結論
- Ruby 4.0.9 / 3.4.12 / 3.3.13が2026年10月23日に公開されました
- Rubyの正規表現エンジンOnigmoにあるdouble freeやinteger overflowなど複数のバグを修正します
- GitLabでは、これらのバグを利用してメモリ破壊からRCEにつながる可能性が確認されました
- 特に影響するのは、攻撃者が指定できる文字列を正規表現としてコンパイルするアプリです
- 開発者がコード内に固定で書いた正規表現だけを使うアプリは、Ruby公式によれば今回の問題の影響を受けません
Regexp.timeoutだけでは防げません- パターン長を制限するだけでも十分ではありません
- Ruby公式は4.0.9、3.4.12、3.3.13以降への更新を推奨しています
GitLabで何が起きたのか
GitLabは、CI設定などでユーザーが指定した文字列をRubyのRegexp.newなどで正規表現へコンパイルする処理を持っています。
GitLabの調査では、細工した正規表現パターンをコンパイルさせることで、Rubyの正規表現エンジンOnigmo内部でメモリ破壊を起こし、GitLabサーバー上でリモートコード実行へ発展させられることが分かりました。
GitLabはこれらに対して複数のCVEを割り当てています。
| CVE | 内容 |
|---|---|
| CVE-2026-89078 | 正規表現パーサーのdouble free |
| CVE-2026-93577 | 正規表現コンパイラのinteger overflow |
| CVE-2026-97229 | CI/CD正規表現コンパイラのinteger overflow |
| CVE-2026-110264 | 多数の繰り返しを含むパターンで内部IDがoverflow |
Ruby公式によると、GitLabは自社リリースで同梱Rubyへパッチを適用し、その後Ruby本体側にも根本原因となったバグの修正が取り込まれました。
Ruby側で修正された内容
Ruby公式が公開した対応表では、各CVEが依存するRuby側のバグと、最初に修正を含むバージョンが整理されています。
CVE-2026-89078
正規表現パターンの解析がalternation(|)の後で失敗した際に、double freeが起きる可能性がある問題です。
- Ruby 4.0:4.0.0ですでに修正済み
- Ruby 3.4:3.4.12で修正
- Ruby 3.3:3.3.13で修正
CVE-2026-93577 / CVE-2026-97229
コンパイル済み正規表現のサイズ計算でinteger overflowが起きる可能性がある問題です。
- Ruby 4.0:4.0.8で修正
- Ruby 3.4:3.4.12で修正
- Ruby 3.3:3.3.13で修正
CVE-2026-110264
多数の繰り返しを含むパターンによって、正規表現コンパイラ内部のIDがoverflowする問題です。
- Ruby 4.0:4.0.9で修正
- Ruby 3.4:3.4.12で修正
- Ruby 3.3:3.3.13で修正
そのため、今回4件すべての修正を含むバージョンとしてRuby 4.0.9 / 3.4.12 / 3.3.13が案内されています。
どんなアプリが影響を受けるのか
Ruby公式は、今回のバグへ到達する条件をかなり明確に説明しています。
影響を受ける可能性がある例
攻撃者が制御できる文字列を、次のような処理へ渡すアプリです。
Regexp.new(user_input)Regexp.compile(user_input)Regexp.union(user_input)/#{user_input}/のように外部入力を正規表現リテラルへ埋め込む処理
たとえば、
- CI/CD設定でユーザーが検索パターンを指定できる
- Web管理画面で任意の正規表現を登録できる
- APIから正規表現を受け取りサーバー側でコンパイルする
といった機能を持つサービスは確認が必要です。
影響を受けないとされる例
Ruby公式は、開発者が自分で書いた固定の正規表現だけを使うアプリは今回の問題の影響を受けないとしています。
つまり、Ruby on Railsアプリだから即危険、Rubyが入っているサーバーだから即危険、という整理ではありません。
Regexp.timeoutでは防げない
正規表現関連の脆弱性というと、ReDoS対策としてRegexp.timeoutを設定しているから大丈夫、と考えるかもしれません。
しかしRuby公式は、Regexp.timeoutでは今回のバグを防げないと明記しています。
今回の問題は正規表現が長時間実行され続けるReDoSとは違い、コンパイル処理中のメモリ破壊やoverflowが中心だからです。
また、単純に入力文字数を短く制限するだけでも、すべての問題を確実に防ぐことはできないとされています。短いパターンでも一部のバグを発生させられるためです。
何をすればいいのか
Ruby公式の推奨はシンプルです。
Ruby 4.0系
4.0.9以降へ更新します。
4.0.8までに一部修正は入っていましたが、CVE-2026-110264の根本となるバグを含め、今回の4件をすべてカバーするのは4.0.9です。
Ruby 3.4系
3.4.12以降へ更新します。
Ruby 3.3系
3.3.13以降へ更新します。
Ruby 3.3は現在セキュリティメンテナンス段階ですが、GitLabがCVEを付与した問題に関係するため、今回の正規表現修正も例外的に取り込まれています。
すぐ更新できない場合
Ruby公式は、更新できない場合には信頼できない入力から正規表現をコンパイルしないことを推奨しています。
外部ユーザーがパターンを直接指定できる機能を一時停止する、固定の許可済みパターンだけを選択させる、といった対策を検討します。
GitLabのCVE=Ruby全体のCVEではない
今回少し分かりにくいのがCVE番号の扱いです。
CVE-2026-89078、CVE-2026-93577、CVE-2026-97229、CVE-2026-110264は、GitLabが自社製品への影響として公開したものです。
Ruby公式は、これらのCVEがRuby側に存在するバグへ依存しているためRuby本体にも修正を入れましたが、現時点ではRubyプロジェクト自身が同じ問題に対して独自のCVEを申請したわけではありません。
したがって、
CVE-2026-110264はRubyそのもののCVE番号
と単純に読み替えるのは正確ではありません。
なぜ今回の問題が大きいのか
通常、正規表現関連のセキュリティ問題というと、計算量を増やしてCPUを使い切らせるReDoSがよく知られています。
今回はそれとは異なり、正規表現のコンパイル処理でメモリ破壊が発生し、GitLabではRCEへ利用可能だったという点が重要です。
また、アプリケーション側から見るとRegexp.newは珍しいAPIではありません。外部入力を正規表現として扱う機能があるサービスでは、自社コードに明らかな危険処理がなくても、ランタイム内部の不具合が攻撃経路になる可能性があります。
まとめ
- Ruby 4.0.9 / 3.4.12 / 3.3.13が2026年10月23日に公開された
- GitLabでRCEへ利用可能だったOnigmoの正規表現コンパイル系バグを修正
- 主な問題はdouble freeとinteger overflow
- 攻撃者が制御できる正規表現をコンパイルするアプリが主な対象
- 固定の正規表現だけを使うアプリはRuby公式によれば今回の問題の影響を受けない
Regexp.timeoutや単純な文字数制限だけでは防げない- Ruby公式は4.0.9 / 3.4.12 / 3.3.13以降への更新を推奨
参考
関連記事
PHP2Shellは始まりか|Cloudflare CEOが『他の重要ソフトにも重大脆弱性』、AIで発見が加速
Cloudflare CEOのMatthew Prince氏は、PHP2Shell以外にも重要ソフトウェアに複数の深刻な脆弱性が存在すると認識しているとReutersに説明。AIで脆弱性の発見と悪用までの時間が短縮する中、今後数カ月〜数年に何が起きるのか、一般ユーザー・サイト管理者が備えるべきことを
PHP公式が追加対策を案内|更新済みでもsession.upload_progress無効化を推奨
PHP公式は2026年10月23日、CVE-2026-109619に関連する追加の情報提供として、次回の通常バグ修正版まで session.upload_progress.enabled=0 を推奨しました。新CVEではなく、10月21日の重大RCE修正後も残る可能性のある低確率ベクトルへの追加対策
UpdraftCentral経由でWordPress不正侵入|TeamUpdraft公式発表と利用者が確認すべきこと
TeamUpdraftは2026年10月、teamupdraft.comへの不正アクセスとUpdraftCentral接続キー悪用によるWordPressサイト侵入を公表しました。不審な管理者・プラグイン確認、1.26.13以降への更新、パスワード変更などを公式情報ベースで整理します。