Modern Frontend CVEs

対象CVE: CVE-2026-71314

[Nuxt.js 深刻度High] v-forの無限展開による認証不要なOOMクラッシュ脆弱性 (GHSA-hxcr-hm88-mpq6)

Nuxtのアイランドレンダリングにおいて、`v-for`ディレクティブが認証なしに無限に展開されることで、サーバーがメモリ枯渇(OOM)クラッシュに陥る可能性のある深刻度Highの脆弱性です。

はじめに

Nuxt.jsを使用されている日本のフロントエンドエンジニアの皆様へ。`GHSA-hxcr-hm88-mpq6` (CVE-2026-71314) という深刻度Highの脆弱性がNuxt.jsで報告されました。

この脆弱性は、Nuxtのサーバーサイドレンダリング(SSR)機能の一部であるアイランドレンダリングにおいて、悪意のある入力によってサーバーのメモリを枯渇させ、サービス停止を引き起こす可能性を秘めています。認証なしで攻撃が可能であるため、迅速な対応が求められます。

脆弱性の詳細:なぜOOMクラッシュが発生するのか?

この脆弱性は、Nuxtの「アイランド」または「サーバーコンポーネント」内で`v-for`ディレクティブが使われている場合に発生します。

攻撃者は、アイランドのURLハッシュがリクエストのダイジェスト(非秘密情報)であることを利用し、任意のプロパティに対する有効なハッシュを計算できます。例えば、`<MyIsland :count="largeNumber" />` のように、`v-for="n in count"` の`count`に巨大な整数(例: 40,000,000)を渡すことが可能です。

サーバーは、指定された`count`の数だけ`v-for`を展開しようとします。この際、イテレーションの数に比例して大量のメモリをSSRプロセスで割り当てます。これによりサーバーのメモリが枯渇し、プロセスがクラッシュ(Out-of-Memory: OOM)に至ります。

さらに深刻なのは、この攻撃が認証なしで行うことができ、わずか130バイト程度のHTTPリクエストでサーバーをダウンさせることが可能だという点です。

影響を受けるコードパターン

具体的には、以下のようなコードパターンが影響を受けます。

1. プロパティとして渡された数値を直接`v-for`のイテレータとして使用している場合(例: `v-for="n in count"`)。

2. スロットの反復にプロパティを使用している場合(例: `<slot v-for="item in items">`)。

いずれのパスも(Vueの`ssrRenderList`とNuxtの`vforToArray`ヘルパー)この脆弱性の影響を受けます。

対策:直ちにアップデートを!

この脆弱性は以下のバージョンで修正されています。Nuxt.jsを使用しているすべてのプロジェクトは、直ちにこれらのバージョンにアップデートすることを強く推奨します。

修正バージョン:

・ `nuxt@4.5.1`

・ `nuxt@3.21.10`

修正内容として、アイランド/サーバーコンポーネント内の`v-for`のソースは、レンダリング境界で最大反復回数(`MAX_VFOR_LENGTH = 100000`)にクランプ(制限)されるようになりました。これにより、攻撃者がいくら大きな数値を指定しても、反復回数は10万回に制限され、無制限なメモリ割り当てを防ぎます。また、以前のボディサイズ上限(GHSA-9pgf-384g-p7mv)と組み合わせることで、安全性が向上しています。

暫定的な回避策(緊急時のみ)

いますぐアップデートが難しい場合、以下の暫定的な回避策を検討してください。ただし、これは一時的な対処であり、最終的にはアップデートが必要です。

・ **コンポーネント内での制限**: サーバーコンポーネント内で`v-for`の反復回数を明示的に制限します。例: `v-for="n in Math.min(count, 1000)"`

注意点として、`/__nuxt_island/`エンドポイントにリクエストのボディサイズ制限を設けることは、配列形式の入力には有効ですが、整数値による増幅のケース(本脆弱性)には完全には対応できません。あくまで緊急時の一時的な対処と考えてください。

フロントエンドエンジニアがすべきこと

1. **プロジェクトの確認**: ご自身のNuxt.jsプロジェクトが対象バージョンを使用しているか確認してください。特にSSRを利用している場合は影響が大きいです。

2. **アップデートの実施**: 直ちにNuxt.jsを最新の修正済みバージョンにアップデートしてください。

3. **本番環境の優先対応**: 本番環境でこの脆弱性を持つNuxtアプリケーションを運用している場合、サービス停止のリスクが非常に高いため、最優先で対応することをお勧めします。

まとめ

本脆弱性は、Nuxtアプリケーションの可用性に直接影響を与える重大な問題です。攻撃者が比較的容易にサーバーをクラッシュさせることが可能であるため、迅速な対応が求められます。Nuxt.js開発チームによって提供されたパッチを適用し、常に最新の安定版を使用することを心がけましょう。これにより、ユーザーに安全で安定したサービスを提供することができます。

← ブログ一覧に戻る