CVE-2025-29927:Next.jsでの認証バイパス

Matthew Mathur

シニアセキュリティリサーチャー, Fastly

Fastly セキュリティリサーチチーム

Fastly のセキュリティリサーチチーム, Fastly

主なポイント

  • 2025年3月21日、Vercel は Next.js の CVE-2025-29927 に関するセキュリティアドバイザリーをリリースしました。

  • CVE-2025-29927 は、Next.js ミドルウェアにおける認証バイパスの脆弱性です

  • この脆弱性は次のバージョンに影響を与えます。

    • 15.2.3 より前の 15.x

    • 14.2.25 より前の 14.x

    • 13.5.9 より前の 13.x

    • 12.3.5 より前の 12.x

    • 11.x、すべてのバージョン

Fastly NG-WAF をご利用のお客様は、CVE-2025-29927 のテンプレートルールを有効にすることで、この脆弱性への対策をご自身で行えます。

CVE-2025-29927 脆弱性の詳細

Next.js は、フルスタックの Web アプリケーションを構築するための一般的な React フレームワークです。Next.js では、ミドルウェアはリクエストがルートで処理される前にコードを実行できる機能です。API ルートやページに到達する前に、認証、リダイレクト、レスポンスの変更などの動的なリクエスト処理を可能にします。この脆弱性は、Next.js が特定のリクエストにミドルウェアを適用する際の決定方法に関係しています。リクエストが処理されると、Next.js はx-middleware-subrequest ヘッダーの値を取得し、それを使用してミドルウェアを適用するかどうかを決定します。ヘッダーの値に特定の値 (脆弱性のあるバージョンごとに異なる) が含まれている場合、Next.js はミドルウェアの適用をスキップしてリクエストを転送します。

つまり、リクエストに x-middleware-subrequest ヘッダーと (バージョン固有の) 値が含まれている場合、Next.js ミドルウェアはバイパスされます。

以前のバージョンの Next.js では、ヘッダーの値に middlewareInfo.name 変数の値が含まれているかどうかを確認しています。これは単にミドルウェアが配置されているパスですが、バージョンやインストールによって異なることがあります。

バージョンごとの状況は次のとおりです。

  • バージョン 12.2 より前

    • デフォルトではミドルウェアは pages/_middelware.ts に存在するので、ペイロードは pages/_middleware となります。これらのバージョンでは pages/ ディレクトリに配置されている必要があります

    • しかし、ミドルウェアを含むネストされたディレクトリを作成することができるため、アプリケーションの設定によっては pages/example/_middleware のようになることがあります。

  • バージョン 12.2 以降、バージョン 15.x より前

    • ミドルウェアはページディレクトリにはなく、アンダースコアのプリフィックスも削除されましたが、Next.js はミドルウェアファイルを配置できる /src ディレクトリもサポートしています

    • ペイロードにはミドルウェアもしくは src/middleware が含まれています

  • バージョン 15.x

    • Next.js はミドルウェアをバイパスするために、middlewareInfo.name が少なくとも5回存在することをチェックするようになりました。また、/src ディレクトリも依然として可能性があります

    • ペイロードには middleware:middleware:middleware:middleware:middleware もしくは src/middleware:src/middleware:src/middleware:src/middleware:src/middleware のいずれかが含まれています。

脆弱性とその発見に関する詳細については、Rachid と Yasser がこちらの投稿で詳しく説明しています。認証バイパスの他に、脆弱性を悪用してキャッシュポイズニングを通じてサービス妨害攻撃を引き起こす方法も説明しています。

実用的な推奨事項

Fastly は、可能であれば、この脆弱性を修正する次のパッチ適用済みバージョンの Next.js に更新することを推奨します。

  • 15.x用、15.2.3で修正済み

  • 14.x用、14.2.25で修正済み

  • 13.x の場合、13.5.9 で修正されました

  • 12.x の場合、12.3.5 で修正済み

  • 11.x の場合、利用可能なパッチはありません

Fastly NG-WAFのお客様

Next.js のバージョンにパッチを適用できない場合、パッチを適用する時間が必要な場合、もしくはこの脆弱性に対する追加の保護を探している場合は、CVE-2025-29927 のテンプレートルールを有効にすることができます。仮想パッチの適用に関して、さらにサポートが必要な場合は、Fastly のセキュリティサポートチームにお問い合わせください。

参照リンク