9月30日に、Next.jsの16.3.8と15.5.27が公開されました。Dependabotのプルリクエストや公式ブログの告知で知り、「7件のうち、うちのアプリに関係するのはどれか」を確かめに来た方が多いと思います。
7件はどれも、特定の設定や機能を使っている場合にだけ影響します。この記事では、7件を「どの設定を見れば該当が分かるか」で並べ直し、確認のためのコマンドと、検知の仕組みが追いつくまでの注意点をまとめます。
先に、要点をまとめます(2026年10月2日確認)。
- 修正版は 16系が16.3.8、15系が15.5.27 です。前日9月29日の16.3.7は不具合修正だけで、セキュリティ修正は入っていません
- 7件の内訳はHigh 1件、Medium 5件、Low 1件です。Highの1件(Image OptimizationのSSRF)は、
next.config に images.remotePatterns を書いていなければ影響しません
- 10月2日時点で、7件はいずれもGitHub Advisory Databaseに登録されておらず、
npm audit では検出されません。予告されていた9件のうちCritical 1件とHigh 1件は修正が延期され、後日のリリースに回っています
9月30日のリリースで修正された7件は何?
High 1件(Image OptimizationのSSRF)、Medium 5件(キャッシュの取り違え4件と、メタデータ画像ルートからの情報漏えい1件)、Low 1件(開発サーバーの情報漏えい)です。15.5.27に含まれるのは、このうち3件です。
Next.js公式の告知と、vercel/next.js のSecurity Advisoriesの内容を整理すると次のとおりです。「15.5.27」の列は、v15.5.27のリリースノートに修正として載っているかどうかです。
| 番号 | 深刻度 | 内容 | 15.5.27 |
|---|
| GHSA-cjq9-62q9-8jv4 / CVE-2026-94483 | High | Image Optimizationで、許可リストに入れた外部ホスト経由のSSRF | 含まれない(16系のみ) |
| GHSA-4jqv-mc3x-m676 / CVE-2026-94543 | Medium | セルフホストのPages RouterでSSG・ISRページのキャッシュが別ルートの内容に置き換わる | 含まれる |
| GHSA-mcj8-r9mp-w47p / CVE-2026-94484 | Medium | ルート直下のcatch-allページとSSG・ISRを併用すると、細工したリクエスト1回で共有キャッシュを汚染できる | 含まれる |
| GHSA-f87g-xv8r-7p7x / CVE-2026-94485 | Medium | webpackでビルドしたApp Routerで、opengraph-image などが dynamicParams を無視する | 含まれる |
| GHSA-3w37-wq28-93x7 / CVE-2026-94544 | Medium | Draft Modeと通常のリクエストが重なると、use cache の結果が混ざり、未公開の内容が見える | 含まれない(16系のみ) |
| GHSA-h694-7cp9-m8p3 / CVE-2026-103004 | Medium | 入れ子の use cache で、root paramの値が違うのに同じキャッシュが返る | 含まれない(16系のみ) |
| GHSA-39w2-rjm5-chcv / CVE-2026-94486 | Low | next dev のMCPエンドポイントが、閲覧中の別サイトから読み取られる | 含まれない(16系のみ) |
GHSA-h694-7cp9-m8p3のCVE番号(CVE-2026-103004)は、アドバイザリには記載がありますが、公式ブログの告知には載っていません。GHSA-f87g-xv8r-7p7xは、アドバイザリの「影響する版」の欄では16.0.0以上とだけ書かれていますが、15.5.27のリリースノートには修正として載っています。15系で該当する構成なら、15.5.27に上げる前提で考えます。
また、9月30日時点のアドバイザリの多くは、修正版の欄が 16.3.? のように番号の確定していない表記のままです(10月2日確認)。修正版の番号は、アドバイザリではなくリリースノートと公式ブログで確かめます。
自社のアプリが該当するかは、どの設定を見れば分かる?
7件はそれぞれ「この設定やファイルがあるか」で切り分けられます。next.config、app/ と pages/ のファイル構成、Draft Modeの使い方、ビルドに使うバンドラーの4点を見れば、多くは判断できます。

| 確認する設定・ファイル | 当てはまる場合に関係する番号 | 該当しない例 |
|---|
next.config に images.remotePatterns がある | GHSA-cjq9-62q9-8jv4(High) | 画像はすべて public/ から配信し、外部ホストを許可していない |
pages/ で getStaticProps を使い、Vercel以外で自前運用している | GHSA-4jqv-mc3x-m676 | App Routerだけで構成している、Vercelにデプロイしている |
ルート直下に [...slug] や [[...slug]] のページがあり、SSG・ISRのルートもある | GHSA-mcj8-r9mp-w47p | catch-allがサブディレクトリの中だけにある |
opengraph-image や twitter-image を動的ルートに置き、dynamicParams = false で公開範囲を絞っている(webpackでビルド) | GHSA-f87g-xv8r-7p7x | Turbopackでビルドしている、メタデータ画像を動的ルートに置いていない |
cacheComponents: true(または experimental.useCache)で、Draft Modeのプレビューを使っている | GHSA-3w37-wq28-93x7 | Draft Modeを使っていない、キャッシュ関数が下書きの内容を返さない |
cacheComponents: true で、use cache の関数の中から別の use cache の関数を呼び、その中でroot paramを読んでいる | GHSA-h694-7cp9-m8p3 | use cache を入れ子にしていない |
開発者が next dev を動かしたまま、ほかのWebサイトを閲覧する | GHSA-39w2-rjm5-chcv | 本番環境(next start やホスティング)のみで確認する |
メタデータ画像の件は、公式の告知で「Turbopackでビルドしたアプリは影響しない」と明記されています。16系の next build は既定でTurbopackを使うため、next build --webpack のようにwebpackを明示している構成が確認の対象です。
確認に使うコマンド
プロジェクトのルートで、次のように検索すると当たりを付けられます。
# 本番で使う版(ロックファイルに入っている版)
npm ls next
# High: 外部画像の許可リスト
grep -n "remotePatterns" next.config.*
# Cache Components と Draft Mode
grep -n "cacheComponents\|useCache" next.config.*
grep -rln "draftMode" app src 2>/dev/null
# ルート直下の catch-all ページ
ls -d app/\[*...* pages/\[*...* 2>/dev/null
# webpack でビルドしているか
grep -n "\"build\"" package.json
remotePatterns があった場合は、許可しているホストを1つずつ見ます。公式の回避策は「DNSの管理を信頼できないホストが入っていないか、許可リストを点検する」ことです(GHSA-cjq9-62q9-8jv4)。hostname: '**' のような広い指定や、利用者が自由にサブドメインを作れるサービスのドメインを許可している場合は、16.3.8への更新を先に進めます。
条件に当てはまらなかった番号も、16.3.8に上げれば修正は入ります。条件の確認は「更新を急ぐかどうか」と「更新後にどの画面を重点的に確かめるか」を決めるために使います。
15系のアプリはどう対応する?
15系は15.5.27に上げると、Pages RouterとSSG・ISRに関わる3件が修正されます。残る4件は16系の機能に関わるもので、15系はアドバイザリ上の影響範囲に入っていません。
15系のサポート(Maintenance LTS)は2026年10月21日で終わります(Next.js Support Policy)。10月22日以降に公表された脆弱性には、15系の修正版が出ない前提で計画を立てます。延期された2件(後述)がサポート終了までに出るかどうかも、10月2日時点では分かりません。
15.5.27への更新は、15.5.26からであれば変更点が3件の修正に限られるため、検証の範囲は絞れます。一方で16系への移行は、middleware.ts から proxy.ts への置き換えやキャッシュの考え方の変更を伴います。どちらを先にやるかの判断はNext.js 15のサポート期限は2026年10月21日|EOLで何が起きるか・16への移行で決めることで整理しています。
16.3.7に上げていれば対応済み?
対応済みではありません。16.3.7は9月29日に出た不具合修正のリリースで、7件の修正は16.3.8に入っています。
公式の事前告知では、当初「9月30日に16.3.7と15.5.27を出す」と案内されていました。その後9月29日に、セキュリティ修正を含まない16.3.7が先に公開され、告知も「修正は16.3.8と15.5.27で出す」と書き換えられています(事前告知の追記)。16.3.7のリリースノートに載っている変更は、Turbopackの内部処理の修正1件だけです。
9月下旬に「16.3.7が出たら上げる」と段取りしていた場合、16.3.7で作業を止めていないか確認します。npmの latest タグは10月2日時点で16.3.8を指しています。
npm auditやDependabotで検知できる?
10月2日時点では検知できません。7件はGitHub Advisory Databaseに登録されておらず、npm audit は16.3.6や15.5.26に対して、今回の7件を表示しません。
npm audit とDependabotが見ているのは、GitHub Advisory Databaseです。Next.js側の公表とデータベースへの登録は別の作業で、2026年の実績では登録まで1日から14日かかっています。10月2日に、next だけを依存関係に持つプロジェクトで確認した結果は次のとおりです。
| 確認した版 | npm audit の表示(10月2日) |
|---|
| next@16.3.5 | GHSA-vcvr-r3jv-pc5j(9月22日公表、9月30日にデータベース登録)をcriticalとして表示 |
| next@16.3.6 | next について表示なし |
| next@15.5.26 | 今回の3件は表示されない |
9月22日に公表されたGHSA-vcvr-r3jv-pc5jは、データベースへの登録が9月30日でした。公表から8日間は、npm audit だけでは気づけなかったことになります。今回の7件も、登録されるまでは同じ状態が続きます。
アドバイザリの版番号を読み取るスクリプトも見落とす
GitHubのAPIでアドバイザリを取得し、修正版の欄と手元の版を比べる方法も、今回は使えません。修正版の欄が 16.3.? のような表記のため、semver.coerce("16.3.?") は16.3.0と解釈され、16.3.6のほうが新しいと判定されます。手元で試したところ、この方式では16.3.6に対して7件中1件(修正版が16.3.8と確定していたGHSA-h694-7cp9-m8p3)しか検出されませんでした。
版番号の確定したリリースノートから、修正されたアドバイザリの番号を拾うほうが確実です。
// scripts/check-next-security-releases.mjs
// 使い方: node scripts/check-next-security-releases.mjs
import { createRequire } from "node:module";
import semver from "semver";
const require = createRequire(import.meta.url);
const installed = require("next/package.json").version;
const res = await fetch(
"https://api.github.com/repos/vercel/next.js/releases?per_page=100",
{ headers: { Accept: "application/vnd.github+json" } },
);
if (!res.ok) throw new Error(`GitHub API ${res.status}`);
const rows = [];
for (const r of await res.json()) {
const v = semver.valid(r.tag_name.replace(/^v/, ""));
// 正式版のうち、手元と同じメジャー系列で、手元より新しいものだけを見る
if (!v || r.prerelease || semver.major(v) !== semver.major(installed) || semver.lte(v, installed)) continue;
for (const m of (r.body ?? "").matchAll(/advisories\/(GHSA-[\w-]+)/g)) {
rows.push({ fixedIn: v, id: m[1] });
}
}
console.log(`next@${installed}: より新しいリリースで修正された番号 ${rows.length} 件`);
if (rows.length) console.table(rows);
process.exitCode = rows.length ? 1 : 0;
10月2日に実行すると、next@16.3.6 では16.3.8で修正された7件、next@15.5.24 では15.5.27で修正された3件、next@16.3.8 では0件が表示されました。
このスクリプトは、リリースノートにアドバイザリへのリンクが書かれていることを前提にしています。また、Next.jsはcanary版をほぼ毎日公開しているため、直近100件のリリースで遡れるのは正式版で16.3.0までです(10月2日時点)。それより古い版を使っている場合は、ページを進めて取得するか、脆弱性の一覧と照合してください。
延期された2件には、どう備える?
Critical 1件とHigh 1件は、上流の依存関係との調整待ちで、後日のリリースに回されました。10月2日時点では日付も中身も公表されていないため、更新をすぐ試せる状態を保っておきます。
9月23日の事前告知では、修正は9件(Critical 1、High 2、Medium 5、Low 1)と案内されていました。9月30日の追記で、7件に変更し、残る2件は上流との調整のうえで後のリリースで対応すると説明されています。どの依存関係かは書かれていません。
この2件の公表に備えて、次の3つを用意しておきます。
- 16.3.8を先に当てておく:延期分の修正は16.3.8より後の版に入るため、今回の更新を済ませておけば、次は差分の小さい更新で済みます
- 検証環境で主要画面を確認する手順を残す:今回の更新で確かめた画面(外部画像の表示、ISRのページ、プレビュー、OG画像)は、次回もそのまま使えます
- 公表元を見る担当を決める:Next.js公式ブログとリポジトリのReleasesを見る人を決めておきます。前述のとおり、
npm audit で気づくのは公表から数日後になります
公表から適用までを誰が担うか、内製で回すか保守を委託するかの考え方は、Next.jsのCVE対応は誰がやるのかで整理しています。
16.3.8への更新では、どこを確認する?
更新コマンド自体は1行です。検証では、7件の修正が入った箇所、つまり外部画像の表示、SSG・ISRのページ、Draft Modeのプレビュー、OG画像の生成を確認します。
npm install next@16.3.8 # 16系
npm install next@15.5.27 # 15系
eslint-config-next を使っている場合は、next と同じ版にそろえます。確認する画面は、上の表で当てはまった項目に合わせて選びます。
| 修正が入った箇所 | 更新後に確認すること |
|---|
| Image Optimization | remotePatterns で許可した外部画像が、更新前と同じように表示されるか |
| SSG・ISRのキャッシュ | 再検証(revalidate)後に、各ページが自分の内容を表示しているか |
use cache とDraft Mode | プレビューでは下書き、通常の閲覧では公開済みの内容が表示されるか |
| メタデータ画像 | generateStaticParams に含めたパスのOG画像が生成され、含めないパスが404になるか |
16.3.6より前の版から上げる場合は、間の回の修正もまとめて入ります。たとえば16.3.3未満からの更新では、8月の修正でAVIF形式の画像最適化が無効化されています。最後に当てた版から今回までに何が修正されたかは、Next.jsの脆弱性一覧【2026年】で版ごとに確認できます。
まとめ
- 9月30日の修正版は 16系が16.3.8、15系が15.5.27 。9月29日の16.3.7には修正が入っていません
- 7件は、
remotePatterns、Pages RouterのSSG・ISR、ルート直下のcatch-all、Cache ComponentsとDraft Mode、入れ子の use cache、webpackでのメタデータ画像、next dev の条件で切り分けられます。Highの1件は remotePatterns を書いていなければ影響しません
- 10月2日時点で7件は
npm audit に出ず、アドバイザリの修正版の欄も確定していません。リリースノートと公式ブログで確認します
- 予告されていた9件のうち、Critical 1件とHigh 1件は後日のリリースに延期されています。16.3.8を先に当て、次の更新に備えます
保守運用の範囲をどこまで契約に含めるかは、Next.js保守運用の費用と契約で確認項目を整理しています。
上の表の確認で手が止まった項目があれば、そこが相談の起点になります。ゼットリンカーでは、Next.jsで動いているシステムの設定を読んで7件のどれに当たるかを判定し、検証から本番への反映までを保守として引き受けています。設定ファイルの場所が分からない段階でもご相談いただけます。
※本記事は、2026年10月2日時点の Next.js公式ブログ、vercel/next.js のSecurity Advisories、各リリースノート、GitHub Advisory Databaseの登録状況、npmレジストリの情報に基づいています。延期された2件の公表や、アドバイザリの修正版の欄の更新により内容が変わることがあります。
技術仕様・対象バージョンは本文と参照先をご確認ください。
最終更新:2026年10月2日