Next.js の脆弱性 CVE-2024-46982 が FIX:キャッシュ・ポイズニング攻撃の可能性

Next.js Vulnerability CVE-2024-46982: Cache Poisoning Exploit Threatens Deployments

2024/09/18 SecurityOnline — 進化のペースが速い Web 開発の世界では、常にセキュリティが懸念事項となっている。そのような傾向がみられるのは、特に Next.js のような、高トラフィックのアプリケーションを実行するプラットフォームにおいてとなる。前日に Next.js チームが公表したのは、このフレームワークの特定のバージョンに影響し、特定のデプロイメントがキャッシュ・ポイズニング攻撃にさらされる原因となる、新たな脆弱性 CVE-2024-46982 に関する情報である。

初心者のために説明すると、Next.js は人気のオープンソース・フレームワークであり、React を用いる開発者がフルスタックの Web アプリケーションを作成できるようにし、最先端の Rust ベースのツールによる超高速ビルドで強化されるものだ。世界中の業界大手企業により使用されている、このプラットフォームは、柔軟性と高性能を実現しているが、他のツールと同様に、セキュリティ上の欠陥が存在する。

Next.js の一部のデプロイメントにおいて、特にページ・ルーター内で非動的 SSR (server-side rendered) ルートを使用しているデプロイメントを脅かす、キャッシュ・ポイズニングの脆弱性が CVE-2024-46982 (CVSS 7.5) である。

細工された HTTP リクエストが脆弱なサーバに送信されると、アプリケーションはキャッシュされるべきではないレスポンスを、キャッシュするように仕向けられる。このエクスプロイトは上流の CDN (Content Delivery Networks) に伝播して有害な結果を招き、ユーザーに対して汚染されたコンテンツを提供する可能性を生み出す。

技術的に言えば、この脆弱性により、Next.js は “Cache-Control: s-maxage=1, stale-while-revalidate” といった不適切なキャッシュ・ヘッダーを使用して、特定のルートをキャッシュするようになる。その結果として、これらのルートを CDN がキャッシュし、安全ではない状態で提供することになり、Web アプリケーションのエコシステムに古いデータや汚染されたデータが導入される可能性が生じる。

リスクは特定のものであり、すべての Next.js デプロイメントが脆弱なわけではない。影響を受ける前提として、以下の全ての条件が当てはまる必要がある:

Next.js:バージョン:13.5.1 〜 14.2.9
Router:ページ・ルーターを使用
Routes:非動的なサーバ・サイド・レンダリング・ルートを使用 (例: pages/dashboard.tsx などであり、pages/blog/[slug].tsx ではない)

以下のコンフィグレーションは影響を受けない:

App Router のみを使用するデプロイメント
Vercel でのデプロイメント

この脆弱性は、Next.js バージョン 13.5.714.2.12 以降で修正されている。問題が発生していない場合であっても、パッチを適用したバージョンへのアップグレードが強く推奨される。この脆弱性に対する公式/推奨の回避策は存在しない。したがって、安全なバージョンへ向けたパッチ適用が最善策となる。