FixVibe
Covered by FixVibemedium

Next.js next.config.js のセキュリティ ヘッダーの構成が間違っている

ヘッダー管理に next.config.js を使用する Next.js アプリケーションは、パス一致パターンが不正確な場合、セキュリティ ギャップの影響を受けやすくなります。この調査では、ワイルドカードと正規表現の構成ミスが機密ルートでセキュリティ ヘッダーの欠落にどのようにつながるか、また構成を強化する方法を調査します。

CWE-1021CWE-200

影響

欠落しているセキュリティ ヘッダーは、クリックジャッキング、クロスサイト スクリプティング (XSS) の実行、またはサーバー環境 [S2] に関する情報の収集に悪用される可能性があります。 Content-Security-Policy (CSP) や X-Frame-Options などのヘッダーがルート間で一貫性なく適用されると、攻撃者は特定の保護されていないパスをターゲットにして、サイト全体のセキュリティ制御 [S2] をバイパスする可能性があります。

根本原因

Next.js を使用すると、開発者は、headers プロパティ [S2] を使用して、next.config.js で応答ヘッダーを構成できます。この構成では、ワイルドカードと正規表現 [S2] をサポートするパス マッチングを使用します。セキュリティの脆弱性は通常、次のような原因で発生します。

  • 不完全なパス カバレッジ: ワイルドカード パターン (例: /path*) は、意図したすべてのサルートをカバーできない可能性があり、セキュリティ ヘッダー [S2] のないネストされたページが残ります。
  • 情報開示: デフォルトでは、Next.js には X-Powered-By ヘッダーが含まれる場合があります。これにより、poweredByHeader 構成 [S2] によって明示的に無効にされない限り、フレームワークのバージョンが明らかになります。
  • CORS の構成ミス: headers 配列内の Access-Control-Allow-Origin ヘッダーが不適切に定義されているため、機密データ [S2] への不正なクロスオリジン アクセスが許可される可能性があります。

具体的な修正

  • 監査パス パターン: next.config.js のすべての source パターンで適切なワイルドカード (例: /:path*) が使用されていることを確認し、必要に応じてヘッダーをグローバルに適用します ([S2])。
  • フィンガープリンティングを無効にする: X-Powered-By ヘッダーが [S2] に送信されないようにするには、next.config.jspoweredByHeader: false を設定します。
  • CORS を制限: headers 構成 [S2] のワイルドカードではなく、Access-Control-Allow-Origin を特定の信頼できるドメインに設定します。

FixVibe がそれをテストする方法

FixVibe は、アプリケーションをクロールし、さまざまなルートのセキュリティ ヘッダーを比較することにより、アクティブ ゲート プローブを実行できます。 X-Powered-By ヘッダーと、さまざまなパス深度にわたる Content-Security-Policy の一貫性を分析することにより、FixVibe は、next.config.js の構成ギャップを特定できます。