本文へ移動

Next.jsの脆弱性はどう対応する? React2Shellから続く修正版と、影響の確かめ方・アップデートの進め方

Next.jsでは、2025年12月のReact2Shellから深刻度の高い脆弱性の発表が続いています。サーバーで動かしているNext.jsの対策は、修正版へのアップデートです。修正版が出るのは16.xと15.xだけで、2026年7月からは公式ブログで前もって予告されるようになりました。影響を受けるかどうかは、バージョンと公開のしかた、使っている機能で決まります。

IN THIS ARTICLE

「Next.jsの脆弱性のニュースを見たけれど、うちのサイトは関係あるのだろうか」。2025年12月のReact Server Componentsの脆弱性(React2Shell)から、Next.jsでは深刻度の高い脆弱性の発表が続いています。2026年も、7月から10月までに、公式ブログで発表された修正版が5回あります。

ただ、発表されたすべての脆弱性が、すべてのサイトに当てはまるわけではありません。影響を受けるかどうかは、Next.jsのバージョンと、サイトの公開のしかた、使っている機能で変わります。

grandworkでは、Next.jsで作ったサイトの保守もお受けしています。保守をお引き受けするときに最初に確かめるのも、Next.jsのバージョンと、サイトをどう公開しているかです。

この記事の結論

サーバーで動かしているNext.jsは、修正版へのアップデートが唯一の対策です。React2Shellや2026年10月のuse cacheの脆弱性のように、公式が「回避する方法はない」とした脆弱性もあります。修正版が出るのは16.xと15.xだけで、14.x以前には原則として出ません。2026年7月からは、修正版が出る前に公式ブログで予告されるようになったので、予告を見てアップデートの予定を組めます。

2025年12月から続くNext.jsの脆弱性

きっかけは、2025年12月3日に公表されたReact Server Componentsの脆弱性です。Reactの側の番号がCVE-2025-55182、Next.jsへの影響を示す番号がCVE-2025-66478で、「React2Shell」とも呼ばれています。

IPA(情報処理推進機構)の注意喚起では、「信頼できないデータをデシリアライズする脆弱性」で、遠隔の攻撃者によって任意のコードを実行されるおそれがあるとしています。Next.jsの公式の発表では、深刻度はCVSSで10.0(最も高い値)です。IPAは2025年12月10日に、この脆弱性を悪用したと思われる攻撃が国内で発生しているとの情報も載せています。

影響を受けたのは、App RouterでReact Server Componentsを使っている、Next.js 15.xと16.xのサイトです。Pages Routerのサイトと、Edge Runtimeは影響を受けません。Next.jsの公式の発表は「回避する方法はなく、修正版へのアップデートが必要」としたうえで、2025年12月5日午前6時(日本時間)の時点で修正前のまま公開していたサイトには、使っている秘密情報(APIの鍵など)をすべて取り替えるよう強く勧めています。

12月11日には、この修正を調べる中で、さらに2つの脆弱性が見つかりました。サーバーを止めてしまうサービス拒否と、ソースコード漏洩です。サービス拒否の最初の修正は不十分で、あとから出た修正版(CVE-2025-67779)にもう一度上げ直す必要がありました。

2026年7月以降に公式ブログで発表された修正版は、次のとおりです。

公開日修正版主な内容
2026年7月20日16.2.11/15.5.21深刻度High 4件・Medium 5件。Server Actionsを使うサイトのサービス拒否、ミドルウェアの認証チェックがすり抜けられる問題など
2026年8月25日16.3.3/15.5.24Critical 2件。AVIF画像の最適化と、Windowsのサーバーで、遠隔の攻撃者に任意のコードを実行されるおそれ
2026年9月22日16.3.6/15.5.26Critical 1件。next/ogのImageResponse(Node.js版)で任意のコードを実行されるおそれ。対象は16.2以降
2026年9月30日16.3.8/15.5.27High 1件・Medium 5件・Low 1件。画像の最適化を使ったサーバーサイドリクエストフォージェリ(SSRF)、キャッシュの汚染など
2026年10月14日16.4.1/15.5.28Critical 2件・High 1件。use cache、SVG画像の最適化、Server Actionsのサービス拒否

公開日は、Next.jsの公式ブログの日付です。React2Shellや、8月・10月の画像の最適化の脆弱性のように、原因がNext.jsの外の部品(Reactや、画像処理のsharpなど)にあるものもあります。Next.jsの修正版は、それらの部品を新しくする役割も持っています。

出典
IPA「React Server Componentsにおける脆弱性について(CVE-2025-55182)」Next.js公式「Security Advisory: CVE-2025-66478」(英語)Next.js公式「Next.js Security Update: December 11, 2025」(英語)Next.js公式ブログ(2026年7月〜10月のセキュリティリリース)(英語)確認日:2026年10月27日

2026年7月から、修正版は予告してから出るようになった

「こんなに頻繁に出るなら、追いかけきれないのでは」と思われるかもしれません。この点は、2026年7月に変わりました。

それまでNext.jsは、セキュリティの修正版を予告なしに出していました。2026年7月13日、公式ブログで、修正版を前もって予告して出す仕組みに切り替えると発表しています。およそ月に1回、公式ブログで次の修正版の予定日と、含まれる脆弱性のうち最も高い深刻度を知らせるというものです。

予告のあいだに、ホスティング会社などがファイアウォールのルールで、まだ更新していないサイトを守る準備をする狙いもあります。すでに攻撃に使われているなど急ぐ場合は、これまでどおり定期の分とは別に、臨時の修正版も出ます。9月22日と10月14日の修正版は、この臨時の修正版です。10月14日の分は、6日前の10月8日に公式ブログで予告がありました。

公式ブログは、AIの助けを借りた脆弱性の研究が増えていることも、この仕組みにした理由に挙げています。

つまり、Next.jsのサイトを運用するなら、公式ブログの予告を見て、月に1回ほどアップデートの時間を取っておくことになります。

出典
Next.js公式「Next.js Security Release and Our Next Patch Release」(英語)Next.js公式「Upcoming Next.js Security Update for Upstream Vulnerabilities」(英語)確認日:2026年10月27日

修正版が出るのは16.xと15.xだけ

Next.jsは、メジャーバージョンごとにサポートの段階を決めています。

バージョン公開日段階出るもの
16.x2025年10月21日Active LTS新しい機能、不具合の修正、セキュリティの修正
15.x2024年10月21日Maintenance LTS重大な不具合の修正と、欠かせないセキュリティの修正だけ
14.x以前2023年10月26日(14.x)サポート対象外原則として出ない

15.xのように1つ前になったバージョンは、最初の公開から2年間、Maintenance LTSとして修正が出ます。15.xの最初の公開は2024年10月21日なので、公式の方針の書き方からすると、その2年を迎えたところです。2026年10月27日の時点で、公式のサポートの方針のページには、15.xはまだMaintenance LTSとして載っています。ただ、15.xを使っているサイトは、16.xへの移行を計画しておく時期に入っていると当社では考えています。

14.x以前のサイトは、原則として修正版が出ません。2025年12月のサービス拒否の脆弱性では14.2.35が出ましたが、これは公式の方針にある「深刻度によっては、まれに方針の外のバージョンも修正する」という例外です。この先も出るとは考えないほうがよいと思います。

出典
Next.js公式「Support Policy」(英語)確認日:2026年10月27日

自社のサイトが影響を受けるかを確かめる

影響を受けるかどうかは、次の3つで見当がつきます。

  1. Next.jsのバージョンプロジェクトの package.json の「next」の行か、下のコマンドで確かめます。公式の発表にある修正版より古ければ、更新が必要です。
  2. サイトの公開のしかたVercelや自社のサーバーでNext.jsのサーバーを動かしているのか、HTMLに書き出して置いているだけなのかを確かめます。
  3. 使っている機能App Router、Server Actions、画像の最適化(next/image)、ミドルウェア、use cache などです。公式の発表には、どの機能を使っていると影響を受けるかが書かれています。
npm ls next react react-dom

このコマンドを、プロジェクトのフォルダで実行すると、実際に入っているNext.jsとReactのバージョンが表示されます。package.json に「^16.3.0」のように幅を持たせて書いてある場合、実際に入っているバージョンとは違うことがあるため、こちらで見るほうが確実です。

脆弱性の条件になった主な機能

使っている機能・環境関係した主な脆弱性
App Router(React Server Components)React2Shell(2025年12月)、サービス拒否、ソースコード漏洩
Server Actionsサービス拒否(2026年7月・10月)、SSRF(2026年7月)
画像の最適化(next/image の既定の方法)AVIF画像(2026年8月)、SVG画像(2026年10月)、SSRF(2026年9月)
ミドルウェア(Proxy)認証チェックのすり抜け(2026年7月)
Cache Components(use cache)任意のコードの実行(2026年10月)、キャッシュの漏洩(2026年9月)
Windowsのサーバー任意のコードの実行(2026年8月)

表は主なものだけで、ほかにも条件の細かい脆弱性があります。使っていない機能の脆弱性は当てはまりませんが、使っているかどうかの判断を誤ることもあります。当社では、条件に当てはまらないと分かっていても、修正版には上げておくことを勧めています。

HTMLに書き出したサイト(静的エクスポート)の場合

Next.jsには、サイトをHTMLとCSS、JavaScriptのファイルに書き出して、普通のWebサーバーに置く方法(静的エクスポート、output: ‘export’)があります。公式の資料では、この方法ではServer Actions、既定の方法での画像の最適化、ミドルウェア(Proxy)、ISRなど、Node.jsのサーバーが要る機能は使えないとしています。

上の表の脆弱性の多くは、こうしたサーバーの機能が条件です。そのため、書き出したファイルだけを公開しているサイトは、当てはまらないものが多いと当社では見ています。

とはいえ、Next.jsを古いまま置いておいてよいわけではありません。開発やビルドに使うパッケージにも脆弱性は見つかります(2026年9月には、開発用のサーバー next dev の脆弱性も公表されました)。それに、あとからフォームなどサーバーの機能を足したときに、古いバージョンのままだと、一度に上げる幅が大きくなります。

Vercelで公開しているサイトの場合

Vercelは、React2Shellの公表の前から、ファイアウォール(WAF)のルールで攻撃を防ぐ対策を入れていました。脆弱性のあるバージョンの新しいデプロイも止める対応をとりました。2026年9月のキャッシュの汚染のように、Vercelで公開しているサイトは影響を受けないとされたものもあります。

それでもVercelは、「修正版へのアップデートが唯一の完全な修正」で、WAFのルールはあらゆる攻撃の形を防げるわけではないとしています。Vercelが受け持つのはサーバーの管理で、サイトのNext.jsのバージョンを上げるのは、サイトを運用する側です。

出典
Next.js公式「Static Exports」(英語)Vercel「React2Shell Security Bulletin」(英語)Next.js公式「September 2026 Security Release」(英語)確認日:2026年10月27日

Next.jsのアップデートの進め方

修正版の番号が分かったら、次の順で進めます。

  1. 公式の発表で、修正版の番号と条件を確かめる16.xなら16.xの、15.xなら15.xの修正版を使います。発表に書かれた条件と、自社のサイトで使っている機能を照らし合わせます。
  2. 検証環境でパッケージを上げるVercelならプレビューのデプロイなど、本番とは別の環境で上げます。ビルドが通るか、主なページとフォームが動くかを確かめます。
  3. 本番に反映して、公開されたバージョンを確かめる反映したあと、本番で動いているバージョンが修正版になっているかを確かめます。
  4. 公式が勧めている場合は、秘密情報を取り替えるReact2Shellのように、更新前に攻撃された可能性があると公式が案内したときは、APIの鍵などを新しいものに替えます。
npm install next@16.4.1   # 16.x の場合(2026年10月14日の修正版)
npm install next@15.5.28  # 15.x の場合

番号は2026年10月27日時点のものです。次の修正版が出たら、その番号に読み替えてください。

npm auditとDependabotを使うときの注意

npmには、依存パッケージに既知の脆弱性がないかを調べる「npm audit」というコマンドがあります。見つかったものを直す「npm audit fix」もありますが、「–force」を付けると、指定した範囲を超えてメジャーバージョンまで上がることがあります。npmの公式の資料も、何をしたいかがはっきりしないなら使わないよう強く勧めています。

GitHubでソースコードを管理しているなら、Dependabotを使うと、脆弱性のある依存パッケージを、修正を含む最も低いバージョンに上げるプルリクエストが自動で作られます。便利ですが、プルリクエストを取り込む前に、ビルドと表示の確認は必要です。当社の運用支援でも、更新は検証環境と公開後の表示で確かめています。

出典
Next.js公式「Next.js Security Update for Upstream Vulnerabilities」(英語)npm Docs「npm-audit」(英語)GitHub Docs「About Dependabot security updates」(英語)確認日:2026年10月27日

Next.jsのアップデートは誰がするのか

WordPressには管理画面に更新のボタンがあり、本体の自動更新もあります。Next.jsには、そうした仕組みがありません。ソースコードの中の依存パッケージを上げ、ビルドし直して、公開し直す必要があります。

そのため、制作した会社との契約が終わると、誰がNext.jsのバージョンを上げるのかが決まっていないことがあります。当社にも「作った会社との契約が終わって、引き継ぎ先を探している」というご相談があります。公開先がVercelでも、上で書いたとおり、Vercelが上げてくれるわけではありません。サーバーの管理を誰が受け持つかについては、「VercelとCoolifyの違い」をご覧ください。

自社に開発の担当者がいるなら、公式ブログの予告を誰が見るのか、修正版が出たらいつまでに上げるのかを、あらかじめ決めておくことを勧めます。担当者がいない場合は、制作した会社か、保守を受ける会社に任せることになります。

当社の運用支援でお引き受けしていること

当社では、React・Next.jsなどで作られたサイトの保守を、月額の運用支援としてお受けしています。他社が作ったサイトも、状態を拝見したうえでご相談いただけます。

  • 依存パッケージの更新Next.jsなどの依存パッケージ・ライブラリを更新し、更新後の表示を確かめます。
  • ビルド・デプロイの対応ビルドやデプロイの不具合に対応します。公開先は、Vercel、Cloudflare Pages、レンタルサーバー、専用サーバーなどを問いません。
  • 稼働の確認と月次のご報告何をしたか、いま気になる点はあるかを、毎月お伝えします。

セキュリティ診断(脆弱性診断)は、運用支援には含まれません。必要な場合は、内容をお聞きしてご相談に応じます。

  • Next.jsのサイトのアップデートを任せたい方へ依存パッケージの更新とビルドの確認を、毎月お引き受けしています。いまのバージョンが分からなくても、サイトを拝見するところからご相談いただけます。React/Next.js等 運用支援の内容を見る