
GitLab CVE-2026-97229(および CVE-2026-110264)の検出専用トリアージ:セルフマネージド GitLab のバージョンとその Ruby を評価し、10月12日パッチとカスタム Ruby の罠を検出します。ペイロードなし、ネットワークプローブなし。
gitlab-onigmo-scanner2つの CVSS 10.0 の GitLab 正規表現脆弱性、CVE-2026-97229 と CVE-2026-110264 に対するバージョントリアージ。所有している GitLab のバージョンを渡すと、そのビルドがまだ危険な状態かどうかを判定し、すでに人々を陥れている2つの罠を検出します。ネットワークには一切触れず、ペイロードも送信せず、CI の lint エンドポイントにもアクセスせず、細工された正規表現をコンパイルすることもありません。
脆弱性詳細 | 値 |
|---|---|
CVE | CVE-2026-97229、および併せて評価された CVE-2026-110264 |
バグ | GitLab がユーザー提供の正規表現をコンパイルする際に、Ruby に組み込まれた正規表現エンジン Onigmo で発生する 整数オーバーフロー (CWE-190) |
影響 | 特定の条件下で、セルフマネージド GitLab サーバー上での 未認証のリモートコード実行 |
深刻度 | 両方とも 10.0 の critical、GitLab が CNA として採点 |
悪用状況 | CVE-2026-97229 は 2026-10-29 に CISA KEV へ追加、連邦機関の期限は 2026-11-01。CVE-2026-110264 は本稿執筆時点で KEV への掲載はなく、GitLab は攻撃での使用を示す兆候はないと報告している |
CVE-2026-97229 は CI/CD 正規表現の脆弱性です。CI/CD 設定内の特別に細工された正規表現、不十分な正規表現検証が原因で、2026-10-12 に修正されました。CVE-2026-110264 は2つ目の、より広範な正規表現の脆弱性で、2026-10-21 に修正され、7.0 まで遡るすべてのセルフマネージドリリースに影響します。同じエンジン、同じスコア、しかし異なるバグであり、だからこそ1つのチェックだけでは不十分なのです。
修正済みバージョンCVE-2026-97229 (2026-10-12 修正)系列 | 修正バージョン |
|---|---|
GitLab 19.2 | 19.2.8 |
GitLab 19.3 | 19.3.5 |
GitLab 19.4 | 19.4.2 |
GitLab 19.5、19.2 より古いもの | この CVE の影響対象としては記載なし |
CVE-2026-110264 (2026-10-21 修正)系列 | 修正バージョン |
|---|---|
GitLab 19.5 | 19.5.1 |
GitLab 19.4 | 19.4.3 |
GitLab 19.3 | 19.3.6 |
GitLab 19.2 | 19.2.9 |
GitLab 19.1 | 19.1.9 |
GitLab 19.0 | 19.0.10 |
GitLab 18.11 | 18.11.13 |
GitLab 18.10 以前 | 修正リリースなし、18.11.13 以降へアップグレード |
Ruby、ソースインストールおよびカスタムイメージの場合系列 | 修正バージョン |
|---|---|
Ruby 3.3 | 3.3.13 |
Ruby 3.4 | 3.4.12 |
Ruby 4.0 | 4.0.9 |
Ruby 3.2 以前 | 修正なし、サポート終了、3.4 または 4.0 へ移行 |
罠 1: 10月12日のパッチは10月21日をカバーしない19.4.2、19.3.5、19.2.8 は CVE-2026-97229 を修正しました。しかしそのいずれも、それぞれのブランチにおける CVE-2026-110264 の修正バージョン (19.4.3、19.3.6、19.2.9) を下回っています。10月12日 にパッチを当てて止めてしまったなら、あなたはまだ脆弱であり、最初の CVE しか知らないスキャナーはあなたを安全だと判定するでしょう。このツールは両方を評価し、その罠を検出した際には出力で明示します。
罠 2: GitLab をアップグレードしても、自前の Ruby は修正されないGitLab の修正は、公式パッケージやイメージに同梱される Ruby へのパッチです。ソースインストールや、Ruby を別途インストールするカスタムイメージでは、GitLab のアップグレードによってそのパッチは適用されません。Alpine Linux はまさにこの事例を経験しました。2026-10-22 に GitLab 19.3.6 へアップグレードしたにもかかわらず、そのイメージが標準の Ruby を使用していたため脆弱なままでした。攻撃者は 2026-10-20 と 21 にそのサーバーを探索し、ワーカーを8回クラッシュさせ、そのうち4回ではエクスプロイトを途中まで進め、さらに 25 と 26 に再び戻ってきました。Alpine はエクスプロイトが成功した証拠を見つけられず、否定することもできず、インスタンスをゼロから再構築し、秘密鍵を交換し、すべてのパスワードをリセットしました。2026-10-27 以降に再取得した修正済みイメージには Ruby 3.3.13 が含まれています。
つまり、--install-type official は GitLab のバージョンのみを判定します。Ruby がそれに付随するためです。--install-type source または custom は、--ruby-version で指定した Ruby も判定し、Ruby のバージョンが欠けている場合はクリーンではなく UNKNOWN と判定します。Ruby 4.0.8 は知っておく価値のある特殊なケースです。これは CVE-2026-97229 のバグを修正しますが CVE-2026-110264 は修正しないため、ここでは VULNERABLE と判定されます。Ruby はこれらの修正について独自の CVE 識別子を要求していないため、CVE レコードをインストール済みパッケージと照合するスキャナは、どこにも脆弱な Ruby を見つけられません。このツールは代わりに Ruby のバージョンを直接チェックします。
チェックする内容GitLab バージョン: CVE-2026-97229 と CVE-2026-110264 を個別に、その後で総合的な判定を1つCSV インベントリ: name,gitlab_version,ruby_version,install_type,hostingsource または custom であると指定した場合の Ruby の罠GitLab.com と Dedicated各検出結果には判定が付きます: VULNERABLE、FIXED、EOL_NO_FIX、UNKNOWN、または影響しないブランチ上の単一 CVE に対する NOT_AFFECTED。EOL_NO_FIX は脆弱としてカウントされます。その系統にパッチが来ることはないためです。
決して行わないことネットワークリクエストなし。リモートサーバへのプロービングなし。細工された正規表現なし、CI lint リクエストなし、エクスプロイトトラフィックなし、PoC コードなし。提供されたバージョン文字列を読み取って停止します。これは意図的なものです: CVE-2026-97229 の公開 PoC はすでに存在しており、ここでそれを再現しても防御上の価値は何も加わりません。
PoC やバージョンカウンタがすでに存在するのに、なぜこれなのかCVE-2026-97229 の公開資料は主に攻撃的なものです: git ユーザとしてコードを実行する PoC や、どのビルドが武器化可能かをマッピングするラボなどです。Censys は公開されているホストをバージョン別に数えています。GitLab はログ内の悪用試行を発見するための Sigma ルールを公開しました。しかしそのいずれも、10月の CVSS 10.0 の欠陥を両方まとめて判定し、source または custom インストールの下にある Ruby をチェックする、単体の防御的トリアージツールではありません。そのギャップがこのリポジトリです: 1つのコマンド、両方の CVE、両方の罠、ペイロードなし。GitLab の Sigma ルールの代わりではなく、それと併用してください。インスタンスがプローブされた場合、バージョントリアージは侵害トリアージではありません: ワーカーのクラッシュログと Onigmo のクラッシュレポートを確認し、試行を除外できない場合は Alpine の例に従ってください。
判定検出結果 | 重大度 |
|---|---|
GitLab がいずれかの CVE についてそのブランチの修正より前 | VULNERABLE |
GitLab が 18.10 以前、または source/custom インストールで Ruby 3.2 以前 | EOL_NO_FIX、脆弱としてカウント |
GitLab が両方の修正に到達または超過し、該当する場合は修正済みの Ruby | FIXED |
Ruby バージョンのない Source/custom インストール、またはこのツールのデータ(2026-10-30)より新しいブランチ | UNKNOWN、クリーンではない |
GitLab.com / Dedicated | FIXED、GitLab によりパッチ適用済み |
使用方法# One instance, official package or image
python3 gitlab_onigmo_scanner.py --version 19.4.2
# One instance, source install with its own Ruby
python3 gitlab_onigmo_scanner.py --version 19.4.3 --ruby-version 3.4.11 --install-type source
# A whole estate, machine-readable output
python3 gitlab_onigmo_scanner.py --list inventory.csv --json
# Tests (version tables only, no network)
python3 -m unittest discover -s tests -v
inventory.csv 形式、ヘッダー行は任意:
name,gitlab_version,ruby_version,install_type,hosting
prod,19.4.1,,official,self-managed
staging,19.4.3,,official,self-managed
legacy-source,19.4.3,3.4.11,source,self-managed
終了コード: 0 = 脆弱なものは見つからなかった、2 = 脆弱性またはサポート終了の検出、1 = スキャンエラー。UNKNOWN は終了コードを変更しませんが、クリーンではありません。これらの項目をクローズする前に、別の方法で確認してください。
情報源間の不一致と、このツールが従う方針19.3.4 について: GitLab のアドバイザリでは、影響を受けるバージョンとして 19.3.5 より前に 19.3 が記載されているため、ここでは 19.3.4 は VULNERABLE と判定されます。あるエクスプロイト研究所は、同梱の libruby が脆弱な経路に入らないため 19.3.4 を武器化できなかったと報告しています。このツールはアドバイザリに従い、保守的に判断します。ベンダーが影響を受けるとしているビルドは、ある研究所の否定的な結果だけでは問題なしとはされません。CVE-2026-97229 の前提条件について: GitLab はこれを PR:N、つまり未認証と評価しています。Rapid7 が再現した経路では、まず攻撃者が制御するコンテンツを公開プロジェクトにプッシュする必要があり、未認証で済むのは最後の CI lint リクエストのみでした。このツールはこの議論の決着は付けません。バージョントリアージはそれに依存しないためです。範囲内のバージョンはいずれの経路でもフラグが立ち、範囲外のバージョンはいずれの経路でもフラグが立ちません。CVE-2026-110264 の悪用について: GitLab は攻撃での使用の兆候はないと報告しており、CISA KEV にも含まれていません。このツールはそれに反する主張はしません。この README にある KEV の掲載、期限日、攻撃の経緯は CVE-2026-97229 のみに属するものです。CVSS 10.0 脆弱性のみです。9月の正規表現 CVE (CVE-2026-89078、CVE-2026-93577、いずれも 9.9、認証済み) は個別には判定しません。10月のチェックに失敗するバージョンはすでにクリティカルであり、10月に修正されたすべてのバージョンは各ブランチの9月の修正より上に位置しますが、これは完全な GitLab 監査ではありません。ここでの FIXED 判定を、他のあらゆる GitLab 脆弱性に対する証明として提示しないでください。正直な注意事項GitLab はどちらの脆弱性についても完全な前提条件を公開していません。GitLab バージョン (19.4.3-ee.0) は数値部分で解析されます。Dedicated で使われる内部ビルド (-internal0) はサフィックス解析ではなく --hosting dedicated フラグで処理されます。UNKNOWN と判定されます。将来のリリースをクリーンと判断する前に、GitLab のアドバイザリを再確認してください。参考情報GitLab のクリティカルパッチリリース 19.4.2 / 19.3.5 / 19.2.8 (CVE-2026-97229、CVSS 10.0、2026-10-12)GitLab のクリティカルパッチリリース 19.5.1 (CVE-2026-110264、CVSS 10.0、2026-10-21、18.11.13 へのバックポート)CVE-2026-97229 の CISA KEV エントリ (2026-10-29 追加、期限 2026-11-01)Alpine Linux のインシデント開示 (2026-10-28): 攻撃は 2026-10-20 から 26、再ビルドとパスワードリセット、カスタムイメージ向けの Ruby 3.3.13 修正Ruby の正規表現修正アドバイザリ (2026-10-23): Ruby 4.0.9、3.4.12、3.3.13、および CVE-2026-110264 における 4.0.8 のギャップCVE-2026-97229 に関する Rapid7 の技術分析 (経路の前提条件、インラインコメントの量指定子バイパス)GitLab 検出ルール (Sigma 形式、Onigmo ワーカークラッシュおよび CI lint パターン)謝辞GitLab の HackerOne プログラムを通じて両方の脆弱性を報告した joaxcarGitLab セキュリティチームOnigmo の修正と、異例なほど明確なアドバイザリ表を提供した Ruby チームRuby の罠を具体的なものにしたインシデントを公開した Alpine LinuxRapid7、Censys、および GitLab の検出研究を公開しているすべての方々免責事項防御的なトリアージと許可されたテストのみを目的として構築されています。所有している、またはテストを許可されているシステムのみをスキャンしてください。作者は悪用について責任を負いません。
Vineeth Kumar(foxcornlab) による調査。バグを見つけた場合や機能を希望する場合は、issueを作成してください。