本文へスキップ
MameTechNews
フロントエンド

Next.js、テナントをまたぐキャッシュ露出など7件を修正

## POINTS

  • 高深刻度はCache Componentsとunstable_cacheの併用で、別テナントのキャッシュが配信され得る構成だ。
  • 自己ホストでPartial Prefetchingを切っていると、未認証リクエストが共有シェルを汚染し得る。
  • EdgeでNextResponse.cookies.set()すると、HttpOnlyのCookieが同一オリジンのJSから読める場合がある。

Next.jsは11月3日、7件の脆弱性に対する更新を出した。修正版は16.4.5と15.5.29である。最も重いのは、Cache Componentsを有効にしたアプリで、同じ公開のuse cache関数を直接とunstable_cacheの内側の両方から呼び、その関数がテナントIDなどのルートパラメータを読む場合だ。コールドフィルの最中に、別リクエストの結果がルートパラメータを確認されないまま返り、同じ引数の後続呼び出しへ再検証か退避まで配信され得る。

中深刻度には、入れ子のuse cacheがロケールやサイトをまたいで内容を再利用する問題、バイナリ引数のキャッシュ識別が衝突して利用者間で結果が混ざる問題がある。自己ホストでnext startを使い、Cache Componentsが有効かつPartial Prefetchingが無効か未設定だと、未認証の細工URLが共有シェルを汚染し、誤った描画や持続的な404を引き起こし得る。

App RouterのEdge Route HandlerとPages RouterのEdge APIでNextResponse.cookies.set()を使うと、内部ヘッダx-middleware-set-cookieにCookieの値が入り、HttpOnlyでも同一オリジンのJavaScriptから読める。再現ではNode.jsのRoute Handlerとcookies().set()は対象外だった。画像最適化では、許可ソースの画像がAVIFと誤認され、SVG拒否設定をすり抜ける問題もある。Cache Componentsを使っているチームは16.4.5か15.5.29へ上げ、テナント分離をキャッシュに頼っている経路から確認するとよい。