CVE-2025-29927:Next.js Middlewareの認可バイパス
2025年3月23日
0 分で読めます
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()ディレクティブを使ってリクエスト処理ロジックを続行させるなど、特定の動作を強制できます。
Next.jsの公式ドキュメントで説明されているように、開発者は認証や認可の判断を行うためにミドルウェアをよく利用します。たとえば、保護されたルートへのアクセスを許可する前に、リクエスト内のCookieやJWTを検証します。

Next.jsにおける認可バイパス
この脆弱性(および過去のNext.jsの脆弱性)を調査し、報告したセキュリティ研究者のAllam Rachid氏とAllam Yasser氏は、外部クライアントがミドルウェアを介して管理される保護対象ルートにリクエストを送信する際、ミドルウェアのロジックを回避できることを示しました。
ミドルウェアを回避するには、クライアントはリクエストに次のHTTPヘッダーを指定する必要があります。
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が検出されると通知されます。

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

次のいずれかに該当する場合、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へのデプロイは影響を受けません。
オープンソースセキュリティの現状を探る
オープンソースソフトウェアとサプライチェーンセキュリティの最新動向やアプローチを理解しましょう。
