
非破壊的な Nuclei テンプレートを使用して GitLab CE/EE の CVE-2026-19478 を検出します。このテンプレートは touch を介して GraphQL フォールバックフィールドのメソッド呼び出しをトリガーし、破壊的な呼び出しを行わずに脆弱なインスタンスを確認します。
GitLab GraphQL API における認証不要の任意メソッド呼び出しの重大な脆弱性(CVSS 9.4)CVE-2026-19478 を検出するための、非破壊的な Nuclei テンプレートです。GitLab は 2026年8月17日 にこの脆弱性を修正しました。
GitLab の GraphQL スキーマは、フィールドを GitLab の最小バージョンに制限する @gl_introduced(version: "X.Y.Z") ディレクティブをサポートしています。このディレクティブが稼働中のインスタンスよりも新しいバージョンを参照している場合、GitLab は(それ以外では不明な)フィールド名に対してフォールバックフィールドを生成します。このフォールバックリゾルバは、認可の再チェックを行うことなく、基盤となる Ruby オブジェクト — Project、User など — に対して object.public_send(method_name) を直接呼び出します。
その結果、/api/graphql に到達でき、任意の公開プロジェクトの fullPath(または任意の公開プロフィールのユーザー名)を知っている認証不要の攻撃者は、そのオブジェクト上の任意の public な引数なしメソッドを呼び出すことができます。これには、touch のような読み取り専用のものだけでなく、destroy / delete のような破壊的なものや、deactivate / block / ban のような状態を変更するものも含まれます。
このリポジトリのテンプレートは touch(updated_at を更新して true を返す)のみを呼び出します。詳細については、下記の安全性を参照してください。
対象はセルフマネージドの GitLab CE/EE のみです。GitLab.com および GitLab Dedicated は影響を受けません。
このテンプレートは、テストを許可されたサーバーフリートをスキャンするために、意図的に無害化されています。
touch のみを呼び出します(updated_at を更新して true を返すだけの ActiveRecord メソッド)。destroy、delete、deactivate、block、ban を呼び出しません。これらはすべて同じバグを通じて到達可能であり、実際に破壊的なメソッドです。root ユーザープロフィールの調査にフォールバックします。どちらにも到達できない場合は、推測せずに単に "not detected" と報告します。所有していないシステム、または明示的な書面によるテスト許可を得ていないシステムに対して、このテンプレートの GraphQL クエリを状態変更メソッドの呼び出しに流用しないでください。
修正済みのインスタンスは不明なフィールドを即座に拒否するため("... doesn't exist on type ...")、テンプレートのマッチャーは touch の肯定シグナルかつその拒否メッセージが存在しないことを要求します。
# single target
nuclei -t CVE-2026-19478.yaml -u https://gitlab.example.com
# validate the template itself
nuclei -t CVE-2026-19478.yaml -validate
# a list of targets, JSON output
nuclei -t CVE-2026-19478.yaml -l targets.txt -j -o results.json
nuclei v3 が必要です(このテンプレートは、v3 テンプレートエンジンで導入された http: プロトコルブロックと jq スタイルの json 抽出器を使用しています。nuclei v2.x では読み込まれません)。
[CVE-2026-19478] [http] [critical] https://gitlab.example.com/api/graphql
18.11.11、19.0.8、19.1.6、19.2.4(またはそれ以降)にアップグレードしてください。完全なアドバイザリについては、GitLab の 19.2.4 パッチリリースノート を参照してください。
このテンプレートは、防御的なセキュリティ目的 — 所有している、または明示的にテストを許可されたインフラストラクチャのスキャン — のために公開されています。許可なくシステムに対してこれを(またはリンクされた PoC を)実行することは、ほとんどの法域で違法です。著者は誤用に対する責任を負いません。
| トラック | 影響を受けるバージョン | 修正バージョン |
|---|
| 18.2.x – 18.11.x | >= 18.2, < 18.11.11 | 18.11.11 |
| 19.0.x | < 19.0.8 | 19.0.8 |
| 19.1.x | < 19.1.6 | 19.1.6 |
| 19.2.x | < 19.2.4 | 19.2.4 |
| 手順 | リクエスト | 目的 |
|---|
| 1 | GET /api/v4/projects?visibility=public | 無害なターゲットとして使用する公開プロジェクトを探す |
| 2 | POST /api/graphql — そのプロジェクトに対して touch @gl_introduced(version: "999.0.0") を実行 | フォールバックフィールドのリゾルバを起動する。脆弱なインスタンスは "touch": true を返す |
| 3(フォールバック) | POST /api/graphql — user(username: "root") に対して同じクエリを実行 | ステップ1で公開プロジェクトが見つからなかった場合のみ使用 |