Skip to main content

CVE-2025-29927:Next.js Middlewareの認可バイパス

著者
blog feature code vulnerability warning

2025年3月23日

0 分で読めます

The CRITICAL Next.js Vulnerability you NEED to be aware of...

CVE-2025-29927:Next.js Middlewareの認可バイパス

2025年3月21日(金)午前9時(UTC)、CVE-2025-29927として識別されるセキュリティアドバイザリーが公開されました。一般的なNext.jsアプリケーションに、深刻度9.1の重大な脆弱性があることが示されました。

脆弱性があるとされるNext.jsのバージョン:

  • Next.js 15.xの15.2.3未満のバージョン

  • Next.js 14.xの14.2.25未満のバージョン

  • Next.js 13.xの13.5.9未満のバージョン

  • 修正済みのNext.js 13.5.9より前のすべてのNext.jsバージョンに脆弱性があるとされていますが、Vercelの脆弱性に関する発表では、今後回避策または修正のバックポートがリリースされる可能性があると述べられています。

重大な認可バイパスやその他のミドルウェアロジックの回避を防ぐため、修正を含む最新バージョンのNext.jsにアップグレードし、デプロイすることをすべての開発者に強く推奨します。

CVE-2025-29927の影響範囲

Vercelは、この脆弱性はVercelホスティングプラットフォームでホストされているアプリケーションには影響しないと発表しました。

もうひとつの人気ウェブホスティングプラットフォームであるNetlifyも、Netlifyにデプロイされたアプリケーションにはこの脆弱性の影響がないと発表しました。

CDNとしてよく利用され、Next.jsアプリケーションのホスティングにも対応するCloudflareでは、オプトインの回避策としてマネージドWAFルールを有効にできます。

Next.js Middlewareについて

Next.jsのミドルウェアの概念は、Expressウェブアプリケーションフレームワークから取り入れられています。ミドルウェアとは、HTTPリクエストを判定し、Node.jsサーバーへの受信リクエストの動作を変更、転送、決定できる仕組みです。

Next.jsのミドルウェア定義は、Expressと同様の関数シグネチャに従い、HTTPリクエストオブジェクト(NextRequest)を受け取り、NextResponseを返します。これにより、401 UnauthorizedのHTTPレスポンスやHTTPリダイレクトを返す、あるいはNextResponse.next()ディレクティブを使ってリクエスト処理ロジックを続行させるなど、特定の動作を強制できます。

    export function middleware(req: NextRequest) {
      const token = req.cookies.get("auth-token")?.value;

      // Define protected routes
      const protectedRoutes = ["/admin"];

      if (protectedRoutes.some((route) => req.nextUrl.pathname.startsWith(route))) {
if (!token) {
  // Redirect to login page if not authorized
  const loginUrl = new URL("/login", req.nextUrl.origin);
  return NextResponse.redirect(loginUrl);
}
      }

      // Allow request to proceed
      return NextResponse.next();
    }

Next.jsの公式ドキュメントで説明されているように、開発者は認証や認可の判断を行うためにミドルウェアをよく利用します。たとえば、保護されたルートへのアクセスを許可する前に、リクエスト内のCookieやJWTを検証します。

ミドルウェアのユースケースに関するNext.jsのドキュメント

Next.jsにおける認可バイパス

この脆弱性(および過去のNext.jsの脆弱性)を調査し、報告したセキュリティ研究者のAllam Rachid氏とAllam Yasser氏は、外部クライアントがミドルウェアを介して管理される保護対象ルートにリクエストを送信する際、ミドルウェアのロジックを回避できることを示しました。

ミドルウェアを回避するには、クライアントはリクエストに次のHTTPヘッダーを指定する必要があります。

    x-middleware-subrequest: middleware

Next.jsのロジックはx-middleware-subrequest HTTPヘッダーを管理し、無限ループを避けるために、ミドルウェアロジックを通らずにリクエストを通過させるかどうか、またそのタイミングを判断します。しかし、前述の脆弱なNext.jsバージョンではこのロジックに不具合があり、x-middleware-subrequest HTTPヘッダーに特定の値が設定されていると、Next.jsサーバーへの受信リクエストがすべてバイパスされる可能性があります。

再現時の注意:HTTPヘッダーの正確な値は、使用しているNext.jsのバージョンによって異なります。

CVE-2025-29927によるNext.jsの認可バイパスの影響を受けていますか?

IDE、Git SCM、CI、またはSnykのモニタリングワークフローで依存関係の脆弱性を検出するためにSnyk Open Sourceを利用している開発者には、Snykプロジェクトにインポートされた次のGitHubリポジトリの例のように、CVE-2025-29927が検出されると通知されます。

package.jsonに重大な問題が1件ある、vulnerable-nextjs-14-CVE-2025-29927プロジェクトを表示するセキュリティダッシュボード。

SnykのNext.jsの脆弱性情報では、アップグレード先(例:今回のケースではnext@14.2.25)が提示されます。また、Snykユーザーはボタンをクリックするだけですばやく脆弱性を修正できます(修正を自動化することも可能です)。

SnykによるNext.jsのCVE-2025-29927脆弱性の詳細と修正方法

次のいずれかに該当する場合、Next.jsの認可バイパスの影響を受け、脆弱な状態にある可能性が高いです。

  • Next.js 11.1.4~13.5.6を実行している

  • 脆弱なNext.jsバージョン(14.x < 14.2.25または15.x < 15.2.3)をセルフホストしている

CVE-2025-29927の修正と回避策

使用しているNext.jsのバージョンとデプロイ先に応じて、修正または緩和策を利用できます。

  • 最新の14.xまたは15.xのバージョン系列を使用して、修正済みのNext.jsバージョンにアップグレードしてください。

  • x-middleware-subrequestヘッダーを含む外部HTTPリクエストが、内部のNext.jsアプリケーションインフラに到達しないようにするファイアウォールルールを適用してください。

  • これらのクラウドホスティングプラットフォームの発表によると、VercelおよびNetlifyへのデプロイは影響を受けません。

オープンソースセキュリティの現状を探る

オープンソースソフトウェアとサプライチェーンセキュリティの最新動向やアプローチを理解しましょう。

カテゴリー: