タグアーカイブ Nuxt3

Nuxt 4.5.1/3.21.10セキュリティパッチ公開。サーバーRCEや認証バイパスを修正

Nuxt 4.5.1/3.21.10セキュリティパッチ公開。サーバーRCEや認証バイパスを修正

Nuxt開発チームは2026年7月27日、メジャーバージョン4系の4.5.1と3系の3.21.10をセキュリティパッチとして公開した。今回のリリースでは、深刻度が高いサーバーサイドのリモートコード実行(RCE)や認証バイパスなど、6つの脆弱性が修正されている。

Nuxtを利用しているプロジェクトはただちにアップグレードすることが推奨される。開発環境限定の脆弱性も含まれており、本番環境で影響を受けない場合でも、安全のため最新版への更新が求められる。

修正内容には、特定条件でのサーバー上での任意コード実行や、大文字を含むルートルールの認証バイパスなどが含まれている。また、キャッシュページで他ユーザーのデータが漏洩する問題(4.xのみ)や、DevTools経由のRCEも併せて修正された。

セキュリティパッチの全体像と影響範囲

セキュリティパッチの全体像と影響範囲

今回のセキュリティリリースは、Nuxt 4.xと3.xの両系統にまたがる。4.xユーザーは4.5.1へ、3.xユーザーは3.21.10へアップグレードする必要がある。修正対象の脆弱性は、サーバーサイドRCE(深刻度:高)、未承認コンポーネントの生成(中)、ルートルール認証バイパス(高)、DoS(高)、キャッシュ時のクロスユーザー情報漏洩(高、4.xのみ)、開発サーバーのパス開示(低)、DevToolsのRCE(緊急、開発時限定)の7件だ。

いずれの脆弱性も、GitHubのアドバイザリを通じて報告され、複数のセキュリティ研究者の協力によって特定された。NuxtチームはVercel、Netlify、Cloudflareの各社とも協力し、一部の脆弱性については公開前に緩和策を展開している。

サーバーサイドを狙う深刻な脆弱性

サーバーサイドを狙う深刻な脆弱性

サーバーアイランドProps経由のRCE

この脆弱性(CVE-2026-53721)は、vue.runtimeCompilerが有効になっている場合に発動する。デフォルトでは無効化されているため、大半のプロジェクトは影響を受けない。しかし、該当する設定では、サーバーコンポーネントやアイランドのPropsにtemplateキーを注入されることで、サーバー(Nitro)上で任意のコードが実行される可能性があった。

攻撃が成立するには、<component :is>resolveDynamicComponenth()といったVueの動的コンポーネント解決にPropsが渡る必要がある。@nuxt/uiが提供するreka-uiasプロパティのようなパターンも該当する。実務上は、動的コンポーネントとサーバーアイランドを併用する設計で注意が必要だ。

修正前の危険なシナリオ(Before)
攻撃者 リクエストに template キーを注入
サーバー(Nitro) 動的コンポーネントで任意コード実行 RCE発生
攻撃成功 攻撃者 Nuxtサーバープロセス
修正後(After)
攻撃者 同様のリクエストを送信
サーバー(Nitro) テンプレート注入をブロック 安全

このデモは、vue.runtimeCompilerが有効な場合の攻撃の流れを概念的に示している。実際には、同設定をオフにしているプロジェクトは影響を受けず、また4.5.1/3.21.10で根本的な修正が行われている。

未承認コンポーネントのインスタンス化

RCEほどではないが、こちらはvue.runtimeCompilerが無効でも影響を受ける。サーバーアイランドが宣言していないPropsを転用して、asプロパティに攻撃者が任意のHTML要素名やコンポーネント名を渡すことで、意図しない要素を生成できてしまう。

たとえば{ "as": "iframe" }のようなデータを渡されると、iframe要素が生成される可能性がある。コード実行には至らないが、予期しないDOM構造を作られてしまう点は脅威だ。Propsの宣言やinheritAttrs: falseで防ぐこともできるが、フレームワーク側での修正により、今後はこうした不正なインスタンス化はブロックされる。

認証バイパスとリソース消費攻撃

認証バイパスとリソース消費攻撃

ルートルールの認証バイパス(大文字・小文字の不一致)

NuxtではrouteRulesappMiddlewareを指定することで認証ゲートを設けられる。しかし、ルールキーに大文字が含まれる場合、リクエストのパスとケースインセンシティブにマッチせず、認証ミドルウェアがスキップされる問題があった。

これは4.4.7/3.21.7で修正された問題(CVE-2026-51354)に起因するリグレッションだ。当時の修正が逆にこの不具合を生んだ。具体的には、pages/Admin.vueのようなファイルやrouteRules: { '/Admin': ... }のような明示的なキーで、/adminへのアクセスがルールを迂回してしまう。

今回のパッチでは、ルートルールのマッチングがVue Routerと同様にケースインセンシティブに統一された。これにより大文字小文字の混在があっても、正しくミドルウェアが適用される。もし意図的にケースセンシティブなマッチングを利用していた場合は、router.options.sensitive: trueの設定が必要だ。

修正前:大文字ルールがスキップされる(Before)
routeRules ‘/Admin’ → 認証ミドルウェア
ユーザー /admin にアクセス → 認証チェックなしで表示
認証バイパス ルールキー
修正後:ケースを問わずミドルウェア適用(After)
routeRules ‘/Admin’ → 認証ミドルウェア
ユーザー /admin にアクセス → 認証チェックが正しく動作
認証正常

この図は、/Adminというルールに対して/adminがアクセスされるケースを示している。修正前はルールが適用されなかったが、4.5.1/3.21.10以降はケースを問わず認証ミドルウェアが動く。

サーバーコンポーネントへのDoS攻撃

サーバーコンポーネントやアイランドのエンドポイント(/__nuxt_island)に対して、v-forに巨大なPropsを渡すなどしてサーバーをクラッシュさせるDoS攻撃が可能だった。また、巨大なリクエストボディの解析でCPUを浪費させる問題も確認されている。どちらも認証不要で実行でき、サービス停止につながる。

修正では、こうしたPropの展開やリクエストのバリデーションが強化され、攻撃が成立しないようになった。

キャッシュページにおけるクロスユーザー情報漏洩(4.x限定)

Nuxt 4.x(4.4.0以上)で、cacheswrisrのルートルールを認証付きページに適用している場合、キャッシュされた_payload.jsonが別のユーザーに提供される可能性があった。HTML自体は正しくユーザーごとに分離されていたが、ペイロードデータのキャッシュが意図せず共有されていたのだ。

この脆弱性は3.xには存在しない。修正バージョンにアップグレードしても、既にキャッシュされている不正なペイロードは削除されないため、別途キャッシュのパージ(CDNやブラウザキャッシュのクリア)が必要になる。

開発環境限定の脆弱性

開発環境限定の脆弱性

Nuxt DevToolsのリモートコード実行(緊急)

この問題(GHSA-279x-mwfv-vcqv)は、nuxt devを実行している開発マシンに影響する。DevToolsが有効な状態で、Vite HMRソケット上で認証不要のRPCメソッドが露出しており、攻撃者が任意のコマンドを実行できる可能性があった。攻撃経路としては、同一ホスト上の別プロセス、--hostオプション使用時のLAN内の他端末、あるいは悪意あるWebサイトへの訪問が考えられる。

この脆弱性は@nuxt/devtools@3.3.1で修正されており、Nuxt本体のアップグレードに加えてロックファイルからこのバージョンが解決されることを確認する必要がある。

本番ビルドではDevToolsとHMR自体が含まれないため、この問題が本番環境に影響することは決してない。しかし、開発者が攻撃を受けるとソースコード漏洩やシステム侵害につながるため、早急な更新が推奨される。

開発サーバーのパス開示(低)

nuxi dev --hostでネットワークインターフェースにバインドしている場合に限り、Chrome DevToolsのワークスペースエンドポイントを経由して、プロジェクトの絶対パスとワークスペースUUIDがLAN上のクライアントに漏洩する問題があった。信頼できないネットワークで開発サーバーを公開している環境は注意が必要だ。

アップグレード手順と注意点

アップグレード手順と注意点

アップグレードは以下のコマンドで実行できる。ロックファイルの更新とともに、依存解決を最新化するために--dedupeオプションを付与する。

npx nuxt upgrade --dedupe

これにより、@nuxt/devtoolsも最新の3.3.1に引き上げられ、DevToolsのRCEも同時に修正される。

キャッシュ関連の脆弱性が悪用されていた場合に備え、本番環境のCDNキャッシュやブラウザキャッシュをクリアすることも推奨する。アップグレードだけでは過去にキャッシュされた不正なペイロードは消えないからだ。

また、ケースセンシティブなルートルールを意図的に使っている場合は、nuxt.config.tsrouter.options.sensitiveを明示的に設定する必要がある点に注意してほしい。

謝辞と安全な報告体制

謝辞と安全な報告体制

これらの脆弱性は、GitHubのプライベートアドバイザリやVercel OSS Bug Bountyプログラムを通じて報告された。Nuxtチームは、問題を責任をもって開示した以下のセキュリティ研究者に謝意を表している。

  • Pig-Tail
  • sec-reex
  • DavidCarliez
  • manop55555
  • dinhvaren
  • quantumshiro
  • Saku0512
  • TazmiDev

また、サーバーRCEについては、Vercel、Netlify、Cloudflareの各社と連携し、公開前に緩和策を配備する準備が整えられた。

Nuxtのセキュリティ脆弱性を発見した場合は、GitHub Security Advisoryから非公開で報告するか、security@nuxtjs.orgへメールすることが推奨されている。

この記事のポイント

  • Nuxt 4.5.1と3.21.10は緊急度の高いセキュリティパッチであり、即時アップグレードが推奨
  • サーバーアイランド経由のRCEは特定条件でのみ発生するが、影響度は高い
  • ルートルールの大文字・小文字の不一致による認証バイパスは、4.4.7/3.21.7の修正に起因するリグレッション
  • キャッシュ時のクロスユーザー情報漏洩は4.xにのみ存在し、キャッシュの手動クリアが必要
  • DevToolsのRCEは開発環境限定だが、開発端末の侵害を防ぐためロックファイルの更新を忘れずに