Next.js脆弱性(CVE-2025-29927)に対するAuth0対応推奨事項

2025年3月21日、Vercelは、ミドルウェアで認可チェックが行われる場合にNext.jsアプリケーション内で認可チェックをバイパスできる重大なセキュリティ脆弱性 (CVE-2025-29927) を公開しました。

Auth0のお客様への影響

nextjs-auth0 SDKを備えたNext.jsアプリケーションを使用しているお客様には、認証または認可の決定がミドルウェア関数でのみ行われていないか確認いただくことをお勧めします。 以下は、SDKのv4およびv3でのこのロジックの例です。


SDK v4の場合:

import { NextRequest, NextResponse } from "next/server"

import { auth0 } from "@/lib/auth0"

export async function middleware(request: NextRequest) {

  const authRes = await auth0.middleware(request)

  if (request.nextUrl.pathname.startsWith("/auth")) {

    return authRes

  }

  const session = await auth0.getSession(request)

  if (!session) {

    // user is not authenticated, redirect to login page(ユーザーは認証されていないため、ログインページにリダイレクトされます)

    return NextResponse.redirect(new URL("/auth/login", request.nextUrl.origin))

  }

  // the headers from the auth middleware should always be returned(認証ミドルウェアからのヘッダーは常に返される必要があります)

  return authRes

}


SDK v3の場合:

// middleware.js
import { withMiddlewareAuthRequired } from '@auth0/nextjs-auth0/edge';

export default withMiddlewareAuthRequired();
// middleware.js
import { withMiddlewareAuthRequired, getSession } from '@auth0/nextjs-auth0/edge';

export default withMiddlewareAuthRequired(async function middleware(req) {
  const res = NextResponse.next();
  const user = await getSession(req, res);
  …
})


NextAuth.js (Auth.js) などの別のライブラリを使用している場合は、アプリケーションで同様のロジックを確認することもお勧めします。たとえば、アプリケーションを保護するためにミドルウェアのみに依存している場合:

export { default } from "next-auth/middleware"; export const config = { matcher: ["/dashboard"] };


アップグレード

この脆弱性を修正するには、Next.jsの次のいずれかのバージョンにアップグレードします。

Next.js 15

15.2.3

Next.js 14

14.2.25

Next.js 13

13.5.9

Next.js 12

12.3.5

Next.jsのアップグレードが選択肢にない場合は、x-middleware-subrequestヘッダーを含む外部リクエストをブロックすることが公式の推奨事項です。

影響なし

以下の条件では、アプリケーションは影響を受けません。

  • Vercelでホストされているアプリケーション
  • Netlifyでホストされているアプリケーション
  • 静的エクスポートとしてデプロイされたアプリケーション
  • 認証と認可に Next.jsミドルウェアのみに依存しないアプリケーション。
    • サーバー レンダリング コンポーネント、ページ ルート、またはAPIルートに対して、v4では auth0.getSession()、v3では getSession() を呼び出して認証と認可を実行するアプリケーション。

追加リソース