Ruby 4.0.9・3.4.12・3.3.13公開、正規表現エンジンの脆弱性を修正
出典: ruby-lang.org

Ruby 3系列の更新版を公開

Ruby開発チームは10月23日、Ruby 4.0.9、3.4.12、3.3.13を公開しました。いずれも正規表現エンジンOnigmoの不具合を修正しています。GitLabは、この問題がサーバー上での任意コード実行につながる可能性を確認しました。

3系列の更新版には、GitLabが割り当てた4件のCVE(脆弱性識別番号)の原因となった不具合の修正が含まれます。Ruby 3.4系と3.3系で、今回の修正を初めて含むリリースは、それぞれ3.4.12と3.3.13です。

Ruby 3.3系は通常、脆弱性修正のみを提供するセキュリティメンテナンス段階です。今回はGitLabが関連する問題にCVEを割り当てたため、例外として修正が取り込まれました。

攻撃者が指定するパターンのコンパイルが対象

影響を受けるのは、攻撃者が内容を指定できる文字列から正規表現を生成するアプリケーションです。たとえば、入力をRegexp.new、Regexp.union、Regexp.compileに渡す場合や、正規表現リテラルに埋め込む場合が該当します。

開発者が記述した正規表現だけを使うアプリケーションは、今回の不具合の影響を受けません。GitLabでは、CI設定などで利用者が記述したパターンをサーバー側でコンパイルしていました。

Ruby開発チームは、利用中の系列に応じて4.0.9、3.4.12、3.3.13以降への更新を推奨しています。更新できない場合は、信頼できない入力から正規表現をコンパイルしないよう案内しています。

4件のCVEに対応する不具合

CVE-2026-89078は、正規表現の選択肢を示す|の後で解析に失敗した際、同じメモリを二重に解放する不具合です。Ruby 4.0系では4.0.0で修正され、3.4系と3.3系では今回の更新版が初めて修正を含みます。

CVE-2026-93577とCVE-2026-97229は、コンパイル後のパターンのサイズ計算で整数オーバーフローが起きる問題です。Ruby 4.0系では4.0.8で修正され、3.4.12と3.3.13にも修正が入りました。

CVE-2026-110264では、繰り返しを多数含むパターンで内部IDがオーバーフローします。Ruby 4.0系での修正は4.0.9に含まれ、3.4.12と3.3.13にも反映されました。

GitLabの修正と深刻度

細工された正規表現のコンパイル時に起きるメモリ破壊は、条件によってGitLabサーバー上での任意コード実行につながる可能性があります。GitLabはCVE-2026-97229とCVE-2026-110264をCVSS v3.1で10.0、残る2件を9.9と評価しました。

GitLabはRubyにパッチを適用した更新版を順次提供しました。確認された更新には9月23日の19.4.1、10月12日の19.4.2、10月21日の19.5.1があります。

GitLabは10月21日の案内で、影響を受ける自社運用環境に更新を推奨し、GitLab.comは修正済みとしました。10月12日の案内でも、GitLab.comとGitLab Dedicatedの環境にパッチを適用済みとしています。

Ruby側のCVE申請は今後検討

Ruby開発チームは、今回の修正についてRuby側のCVEを現時点で申請していません。信頼できない入力から正規表現を生成して使うことは安全ではないと考えてきた一方、過去には総合的な評価を踏まえ、正規表現コンパイルの不具合をRubyの脆弱性として扱った例もあります。

開発チームは、信頼できないパターンを使う場合の説明をドキュメントでどう扱うか、また同種の不具合をRubyの脆弱性として扱うかを議論する予定です。今回の問題についてCVEを申請するかどうかも検討します。

申請する場合、Ruby開発チームは告知を更新するとしています。現時点で追跡に使われている識別番号は、GitLabが割り当てた4件のCVEです。