VercelVercel

React2Shellの脆弱性に関するセキュリティ情報

CVE-2025-55182は、ReactやNext.jsおよびその他のフレームワークに影響する重大な脆弱性であり、直ちに対応する必要があります

Security Team
元の英語記事はこちら
最終更新日: 2025年12月18日

日本時間2025年12月11日更新:React2Shellの公表を受けて、開発者コミュニティによるReact Server Componentsの調査が進みました。その結果、追加でパッチ適用が必要な脆弱性が2件判明しました。CVE-2025-55184(DoS)および CVE-2025-55183(ソースコード漏えい)です。詳細については、新しいセキュリティ情報記事をご覧ください。

日本時間2025年12月5日の早朝時点で、React2Shellのエクスプロイトがいくつか公開されました。React2Shellとは、React Server Components(RSC)の重大な脆弱性で、React 19(CVE-2025-55182)およびRSCを利用するNext.jsなどのフレームワーク(CVE-2025-66478)に影響が及んでいます。状況は刻々と変化しています。最新の情報については、このページおよびVercel DevelopersのXアカウントを定期的にご確認ください。Vercelのダッシュボードにも順次情報を反映します。

この脆弱性は、Next.jsの15.0.0から16.0.6までのバージョンに影響します。該当するバージョンを利用している場合は、他の防御策に頼らず、直ちにアップグレードしてください。パッチの適用方法についての詳細は、後述の「Next.jsアプリをアップグレードし、脆弱性から守る方法」を参照ください。

日付更新内容
日本時間 12月9日 午後1時31 分Vercel Agentは、脆弱性のあるプロジェクトに対し、自動でコードレビューの実行やプルリクエストの作成を行うことができます。詳しくは、後述の「Vercel Agentによる自動アップグレード」を参照ください。
日本時間 12月9日 午前11時09分本番ドメイン以外のすべてのデプロイに対して、Standard Protectionを有効化することを強く推奨します。あわせて、全てのデプロイの共有リンクもそれぞれ確認してください。詳しくは、後述の「Vercelのデプロイ保護」を参照ください。
日本時間 12月7日 午後2時05分あなたが公開しているアプリケーションが日本時間 2025年12月5日 午前6時の時点で未パッチの状態であり、さらに(環境変数などで)シークレットの値を利用していたかご確認ください。もしそうであれば、特に重要度の高いシークレットから順に、すべてのシークレットをローテーションすることを強く推奨します。シークレットの更新方法については、Vercelのドキュメントをご覧ください。
日本時間 12月6日 午後3時29分Vercelは脆弱性のあるNext.jsアプリのバージョン更新に役立つ npm パッケージを公開しました。npx fix-react2shell-next を実行してください。詳しくはGitHubページをご覧ください。
日本時間 12月6日 午前8時44分VercelはHackerOneと提携し、Vercel Platform Protectionを回避する手法を発見された方からの責任ある開示を受け付けています。このCVEに限り、Vercel Platform Protectionsを回避できることを示した有効な報告に対して報奨金をお支払いします。報奨金は、25,000ドル(重大度:High)または50,000ドル(重大度:Critical)です。詳しくはHackerOneのページをご覧ください。

次のいずれかに該当する場合は、アップグレードが必要です。

  • Next.js 15.0.0 〜 16.0.6 を使用している場合:Next.jsの15.0.0から16.0.6までのバージョンを使用したすべてのNext.jsアプリケーションは、この脆弱性の影響を受けます。
  • Next.js 14の一部のcanaryバージョンを使用している場合:14.3.0-canary.77またはそれ以降のNext.js 14 canaryにも脆弱性があるため、ダウングレードまたはアップグレードが必要です。
  • その他のフレームワークでReact Server Componentsを使用している場合:この脆弱性はReact Server Components(RSC)全般に影響します。Next.jsであれ、その他のフレームワークであれ、RSCを利用している場合はアップデートが必要です。

Next.jsをご利用の場合、パッチ適用済みバージョンへのアップグレードが唯一の完全な対処方法であり、強く推奨しています。React Server Componentsを利用している全ての方は、Next.jsかその他のフレームワークかを問わず、直ちにアップデートを行ってください。詳しいアップデート方法については、後述のドキュメントを参照ください。

React2Shellは、React Server Componentsにおける重大な脆弱性であり、React 19およびそれを利用するフレームワークに影響します。一定の条件下において、細工されたリクエストが送信された場合、意図しないリモートコードが実行される可能性があります。

自分のコードベースが脆弱かどうかを確かめる最も確実な方法は、利用中のReactおよびNext.jsのバージョンを確認することです。以下のパッケージのバージョンを検証してください。

  • next
  • react-server-dom-webpack
  • react-server-dom-parcel
  • react-server-dom-turbopack

Vercelをご利用の方が、脆弱なバージョンのパッケージを含むアプリを本番環境にデプロイしている場合、vercel.comのダッシュボード上にバナーが表示されます。このバナーは追加の指標として提供しているもので、ご自身でバージョンを直接確認する作業に代わるものではありません。

必ず、実際のバージョン番号をご確認ください。 npx fix-react2shell-next を実行すると、自動でバージョンをチェックすることができます。詳しくは後述のドキュメントを参照ください。

VercelのWAFルールは、既知のエクスプロイトパターンをフィルタリングすることで、追加の防御レイヤーを提供します。

  • CVE公表前から、当社はReactチームと協力し、エクスプロイトをブロックするWAFルールを設計し、世界中のすべてのVercelユーザーに提供しました。
  • 新たなエクスプロイト手法が登場していないか継続的に監視し、それに応じてWAFルールを段階的に更新しています。(日本時間12月6日未明の時点で、新たに確認された攻撃パターンをカバーする追加ルールを適用済みです)

なお、WAFルールはあらゆるバリエーションの攻撃に対する完全な防御を保証するものではありません。

目次:

VercelのSecurity Actionsダッシュボードでは、対応が必要なセキュリティ上の問題と、その是正手順を一元的に確認できます。Security Actionsダッシュボードにアクセスするにはこちらをクリックしてください

本番環境のデプロイにパッチを適用した後も、過去の脆弱なデプロイは脆弱なままです。本番ドメイン以外のすべてのデプロイに対して、Standard Protectionを有効化することを強く推奨します。

デプロイ保護に守られていないプロジェクトの一覧はSecurity Actionsダッシュボードからご覧になれます。もしくは、デプロイ保護設定を再確認してください

外部ユーザーが、Protection Bypassを適切に設定していないプレビューデプロイやその他の環境からのデプロイを利用していないことを確認してください。(詳しくはドキュメントを参照ください)

デプロイの共有リンクもそれぞれ確認してください。また、プレビュー環境やカスタム環境のデプロイドメインを共有するために、デプロイ保護を無効化している方もいらっしゃるかもしれません。その場合は、Deployment Protection Exceptionを導入することを検討し、除外したデプロイ全てにパッチを適用してください。

Vercel Agent は、脆弱性のあるプロジェクトを自動的に検出し、パッチを適用するプルリクエストを作成できます。

Vercelのダッシュボードから脆弱なプロジェクトを確認し、自動アップグレードを開始してください

fix-react2shell-next というnpmパッケージを使うと、すぐにNext.jsプロジェクトのパッケージを脆弱性のないバージョンにアップグレードできます。アプリケーションのルートディレクトリで以下のコマンドを実行してください。

terminal
npx fix-react2shell-next

動作確認後、すぐに更新されたアプリケーションをデプロイしてください。詳しくは、後述の「デプロイの手順」をご覧ください。

1. 現在のバージョンを確認する

現在のNext.jsのバージョンを確認するには、アプリのページをブラウザで表示し、コンソールで next.version を実行してください。または、 package.json をご確認ください。

package.json
{
"dependencies": {
"next": "15.3.4"
}
}

2. パッチ適用済みバージョンへアップデートする

以下の一覧から、どのバージョンにアップデートすべきかを確認してください。

脆弱性のあるバージョンパッチを適用済みのバージョン
Next.js 15.0.x15.0.5
Next.js 15.1.x15.1.9
Next.js 15.2.x15.2.6
Next.js 15.3.x15.3.6
Next.js 15.4.x15.4.8
Next.js 15.5.x15.5.7
Next.js 16.0.x16.0.10
14.3.0-canary.77またはそれ以降のNext.js 14 canary 脆弱性がない 14.3.0-canary.76 にダウングレードしてください
15.6.0-canary.57またはそれ以前のNext.js 15 canary15.6.0-canary.58
16.1.0-canary.11またはそれ以前のNext.js 16 canary16.1.0-canary.12またはそれ以降のcanary

パッチ適用済みのバージョンには、React Server Componentsの脆弱性を防ぐ実装が含まれています。

PPR(Partial Prerendering)を有効化するためにCanaryリリースをご利用の場合は、15.6.0-canary.58にアップデートしてください。脆弱性を修正しつつ、PPRをご利用いただけます。さらに古いバージョンのパッチ方法については、こちらのディスカッションページをご覧ください。

どのバージョンにアップデートすべきかを確認したら、package.json をアップデートしてください:

package.json
{
"dependencies": {
"next": "15.3.6"
}
}

3 . 依存関係のインストールとLockファイルのアップデート

ご利用のパッケージマネージャーのインストールコマンドを実行してください。

その後、 package.json の変更に加えて、必ずLockファイルの変更もコミットしてください。

terminal
# npm
npm install
# yarn
yarn install
# pnpm
pnpm install
# bun
bun install

4. すぐにデプロイする

動作確認後、すぐに更新されたアプリケーションをデプロイしてください。詳しくは、後述の「デプロイの手順」をご覧ください。

動作確認後、すぐに更新されたアプリケーションをデプロイしてください。

Vercelでデプロイする場合、プラットフォーム側ではすでに脆弱なバージョンの新規デプロイをブロックしており、WAFルールも適用されています。それでもアップグレードは依然として重要です。

Git連携でVercelにデプロイしている場合、パッチ適用のコミットをプッシュするとプレビュー用ビルドが実行され、本番用のブランチにマージすることで本番環境にデプロイできます。VercelのダッシュボードからManual Deploymentを作成して、修正を即座にリリースすることもできます。

Vercel CLIを使用している場合は、以下のコマンドでデプロイしてください。

terminal
vercel --prod

脆弱な状態にあったシステムは、すでに侵害されている可能性があるものとして扱ってください。フレームワークにパッチを適用してデプロイした後に、アプリケーションで利用しているすべてのシークレットをローテーションすることを推奨します。Vercelのチームおよび各プロジェクトで使用している環境変数(シークレット)のローテーション方法について、詳しくはこちらをご確認ください

React Server Componentsを実装している他のフレームワークを利用している場合は、react.devブログに掲載されているReact Security Advisoryを参照してください。該当するソフトウェアの脆弱なバージョンを利用している場合、直ちにパッチ適用済みバージョンへアップデートしてください。

脆弱なパッケージをスキャンし、アップグレードするためのツールを npm パッケージとして公開しました。詳しくはパッケージのページをご覧ください。以下は実行例です。

terminal-light.pngterminal-light.png

最も確実な方法は、デプロイ済みのReactまたはNext.jsのバージョンを、このCVEに照らして確認することです。バージョンの確認方法については、上記の「コードベースに脆弱性があるか確認する」を参照してください。

また、Vercelをご利用の方が脆弱なアプリをデプロイしている場合、vercel.comのダッシュボード上にバナーが表示されます。プロジェクトの本番デプロイに、脆弱なバージョンの nextreact-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopack が含まれている場合にお知らせしています。

このお知らせは、あくまで追加の防御レイヤーとして提供しているものです。脆弱なバージョンを実行しているか、ご自身で確認していただく作業の代わりになるものではありません。

確実に確かめる方法はないですが、アプリケーションのログやアクティビティをご覧になり、想定外のリクエストがないか調査することをお勧めします。たとえば、異常な POSTリクエストや、Functionタイムアウトの急増などです。ただし、Functionのタイムアウトは、必ずしも攻撃の成功を示すものではない点にご注意ください。攻撃者は、正常に実行が完了するペイロードを作成することも可能です。タイムアウトは、成功したエクスプロイトではなく、単なるスキャンや探索行為を示しているだけの場合もあります。

Vercelは、CVE公表前にWAFによる緩和策を講じました。その後、新たなエクスプロイト手法を発見するたびに、WAFルールをどのように回避しているかを特定し、順次パッチを適用しています。WAFルールは防御レイヤーのひとつに過ぎず、100%のカバレッジを保証できるものではありません。アプリケーションを完全に保護する唯一の方法は、パッチ適用済みバージョンへアップグレードすることです。

パッチ適用済みバージョンへのアップグレードが、唯一の完全な対処方法です。VercelのWAFルールは、既知のエクスプロイトのパターンをフィルタリングすることで、追加の防御レイヤーを提供します。しかし、あらゆる攻撃のバリエーションに対して完全な防御を保証できるものではありません。

また、デプロイ保護設定を確認することで、本番ドメイン以外のデプロイが保護されているかを確認できます。

当社は、新たなエクスプロイトの手法を綿密にモニタリングし、新しい情報が得られ次第、WAFルールを継続的に改善しています。日本時間12月6日未明の時点で、最近確認された攻撃パターンをカバーする追加ルールを適用済みです。今後もVercelは、さらなる防御レイヤーの追加と、新しい情報の共有を続けていきます。

現在、Next.jsのcanaryのみで利用できる機能を使用している場合においても、パッチ適用済みバージョンへのアップデートを最優先に行ってください。canaryのみで利用できる機能を使ったまま、パッチ適用済みのNext.jsバージョンへ更新する手順については、Next.jsの公式セキュリティアドバイザリの「Required Action」セクションをご覧ください。

本番環境に対して、公開されている攻撃のPoCを直接使用してテストすることは推奨しません。代わりに、本記事で説明している手順に従い、すべての公開中のアプリが最新のReact Server ComponentsおよびNext.jsのバージョンを使用していることを確認してください。

より複雑な構成のデプロイで追加の検証が必要な場合は、本番サービスやデータに予期せぬ影響が及ばないよう、サンドボックス環境において合成データを用いてテストすることを推奨します。

Vercelは今後数日かけて、既存のv0チャットに自動的にパッチを適用する予定です。ただ、脆弱性があるv0アプリには、自動のパッチを待たず、すぐに手動でパッチを適用することを推奨します。

v0のアプリに手動でパッチを適用するには、次の手順を実行してください。

  1. 脆弱性のあるv0チャットのデプロイダイアログを開く
  2. 「Fix with v0」ボタンをクリックする

なお、非公開のv0アプリはReact2Shellの影響を受けません。

Was this helpful?

supported.