「うちのNext.jsアプリ、大丈夫だろうか」
2025年12月3日、React Server ComponentsにCVSS 10.0(最高深刻度)のリモートコード実行(RCE)脆弱性が公開されました。通称「React2Shell」。さらに12月11日には、追加で2つの脆弱性も公開されています。
そして最も重要な事実として、Palo Alto Networks Unit 42の報告によれば、この脆弱性を悪用した攻撃はすでに実際に観測されています。中国系の攻撃グループ、北朝鮮関連のマルウェア、Cobalt Strike、クリプトマイナーなど、多様な攻撃者がこの脆弱性を狙っています。
私自身、クライアントのNext.jsプロジェクトを複数運用しているため、この発表を見た瞬間に冷や汗をかきました。20年以上エンジニアをやっていますが、CVSS 10.0のRCE脆弱性で、しかも攻撃が進行中というのは、最優先で対応すべき事態です。
この記事では、今回の脆弱性の全体像と対処方法を整理してお伝えします。
—
この記事でわかること
– React2Shell(CVE-2025-55182)の概要と深刻度
– 追加で公開された2つの脆弱性
– 影響を受けるバージョンと修正方法
– 実際に観測されている攻撃の内容
– なぜ「今すぐ」対応が必要なのか
—
React2Shell(CVE-2025-55182):CVSS 10.0のRCE脆弱性
何が起きているのか
2025年11月29日、セキュリティ研究者のLachlan Davidson氏がMeta Bug Bountyプログラムを通じて脆弱性を報告。12月3日に修正パッチとともに公開されました。
この脆弱性は、React Server Components(RSC)のFlightプロトコルにおける安全でないデシリアライゼーションに起因します。攻撃者は、特別に細工したHTTPリクエストをServer Functionエンドポイントに送信することで、サーバー上で任意のコードを実行できます。
なぜ深刻度が最高なのか
この脆弱性がCVSS 10.0(最高スコア)である理由は以下の通りです:
– 認証不要:攻撃者は一切の認証なしに攻撃を実行できる
– ユーザー操作不要:被害者側のアクションは一切必要ない
– 攻撃の複雑性が低い:特殊なスキルや条件なしに攻撃可能
– 信頼性が非常に高い:テストでは「ほぼ100%の成功率」が報告されている
– デフォルト設定で脆弱:create-next-appで作成した標準的なアプリがそのまま攻撃対象になる
さらに重要な点として、明示的にServer Functionsを実装していなくても、React Server Componentsをサポートしているだけで脆弱です。つまり、App Routerを使用しているNext.jsアプリケーションは、基本的にすべて影響を受ける可能性があります。
影響範囲の規模
Palo Alto Networks Cortex Xpanseの調査によると、ReactおよびNext.jsのインスタンスは96万8,000以上が検出されています。Reactは全開発者の約40%が使用し、Next.jsはReactエコシステムにおけるサーバーサイドフレームワークのトップシェアを持っています。
—
追加で公開された脆弱性(12月11日)
React2Shellの修正パッチを調査する中で、セキュリティ研究者により2つの追加脆弱性が発見されました。これらはRCEには至りませんが、それでも対応が必要です。
CVE-2025-55184 / CVE-2025-67779:サービス拒否(DoS)
深刻度:High(CVSS 7.5)
特別に細工されたHTTPリクエストにより、サーバー内部で無限ループが発生し、プロセスがハングします。攻撃者は1つのリクエストを送るだけで、サービス全体を停止させることができます。
注意:この脆弱性の初回修正(CVE-2025-55184)は不完全でした。CVE-2025-67779として追加修正がリリースされています。最初の修正バージョンにアップデートした人も、再度アップデートが必要です。
CVE-2025-55183:ソースコード漏洩
深刻度:Medium(CVSS 5.3)
特別に細工されたHTTPリクエストにより、Server Functionsのコンパイル済みソースコードが漏洩する可能性があります。
漏洩しうる情報:
– ビジネスロジック(アルゴリズムや処理の流れ)
– コード内に直接記述されたシークレット情報(APIキー、パスワードなど)
環境変数経由ではなくハードコードされたシークレットがある場合、この脆弱性で漏洩する可能性があります。
—
実際に観測されている攻撃
Unit 42の報告によると、すでに複数の攻撃活動が観測されています。これは「理論上の脅威」ではなく「現在進行中の攻撃」です。
観測された攻撃の種類
1. 自動スキャンと偵察活動
脆弱なサーバーを探すための自動スキャンが行われています。スキャン後、システム情報の収集、権限レベルの確認、ネットワーク情報の列挙などの偵察活動が続きます。
2. クリプトマイナーの展開
複数のクラスタで暗号通貨マイニングソフトウェアの展開が観測されています。
3. Cobalt Strikeの展開
bashリバースシェルを通じてCobalt Strikeサーバーへ接続する攻撃が確認されています。Cobalt Strikeは、本来はペネトレーションテスト用のツールですが、攻撃者にも広く悪用されています。
4. 中国系アクター(CL-STA-1015)の活動
Unit 42は、CL-STA-1015として追跡している活動クラスタと一致する攻撃を観測しています。このグループは中国国家安全部との関連が疑われる初期アクセスブローカー(IAB)とされています。SNOWLIGHTドロッパーやVShell RATの展開が確認されています。
5. 北朝鮮関連の活動
EtherRATという、Ethereum スマートコントラクトをC2解決に使用するマルウェアの活動が観測されています。北朝鮮の脅威アクターUNC5342がEtherHiding技術を使用しているとの報告があります。
6. その他のマルウェア
Noodle RAT(中国語話者グループが使用するバックドア)、Auto-color(Linuxバックドア)、Webシェルなども観測されています。
—
影響を受けるバージョンと対処方法
影響を受ける環境
React:
– react-server-dom-webpack
– react-server-dom-parcel
– react-server-dom-turbopack
バージョン19.0、19.1.0、19.1.1、19.2.0が影響を受けます。
Next.js:
– バージョン15.x、16.x(App Router使用時)
– バージョン14.3.0-canary.77以降のCanaryビルド
その他のフレームワーク:
– React Router
– Waku
– RedwoodSDK
– Parcel RSCプラグイン
– Vite RSCプラグイン
修正バージョン
現在公開されている修正バージョンは、React2Shell(RCE)と追加の脆弱性(DoS、ソースコード漏洩)の両方に対応しています。
| 現在のバージョン | 修正済みバージョン |
|---|---|
| 13.3.x / 13.4.x / 13.5.x / 14.x | 14.2.35 |
| 15.0.x | 15.0.7 |
| 15.1.x | 15.1.11 |
| 15.2.x | 15.2.8 |
| 15.3.x | 15.3.8 |
| 15.4.x | 15.4.10 |
| 15.5.x | 15.5.9 |
| 16.0.x | 16.0.10 |
| 15.x canary | 15.6.0-canary.60 |
| 16.x canary | 16.1.0-canary.19 |
アップデートコマンド
# 13.3.x, 13.4.x, 13.5.x, 14.xの場合
npm install next@14.2.35
# 15.0.xの場合
npm install next@15.0.7
# 15.1.xの場合
npm install next@15.1.11
# 15.2.xの場合
npm install next@15.2.8
# 15.3.xの場合
npm install next@15.3.8
# 15.4.xの場合
npm install next@15.4.10
# 15.5.xの場合
npm install next@15.5.9
# 16.0.xの場合
npm install next@16.0.10
インタラクティブツール
Vercel公式が提供する対話型ツールで、バージョン確認と適切なアップデートを案内してくれます。
npx fix-react2shell-next
14.3.0-canary.77以降のCanaryを使用している場合
安定版14.xへダウングレードしてください:
npm install next@14
—
なぜ「今すぐ」対応が必要なのか
理由1:攻撃はすでに始まっている
これは「将来起きるかもしれない脅威」ではありません。Unit 42のレポートが示す通り、攻撃は現在進行中です。中国系、北朝鮮関連、一般的なサイバー犯罪者など、複数のアクターが同時にこの脆弱性を狙っています。
理由2:攻撃の成功率が極めて高い
この脆弱性は「確率的なバグ」ではなく「決定論的な論理的欠陥」です。メモリ破壊のように失敗する可能性のある攻撃とは異なり、ほぼ確実に成功します。
理由3:ワークアラウンドがない
この脆弱性には回避策がありません。アップデート以外に対処方法がないのです。WAFで特定パターンをブロックするといった暫定対応も困難です。
理由4:認証なしで攻撃可能
攻撃者はログインや認証を一切必要としません。インターネットに公開されているNext.jsアプリケーションであれば、誰でも攻撃を試みることができます。
—
この脆弱性から学ぶべきこと
20年以上この業界にいると、大きなセキュリティインシデントは何度も経験します。今回の件から、いくつかの教訓を整理しておきます。
シークレット情報は絶対にハードコードしない
ソースコード漏洩の脆弱性(CVE-2025-55183)で最も危険なのは、コード内にハードコードされたシークレットです。
APIキー、データベースのパスワード、外部サービスの認証情報——これらは環境変数で管理すべきです。「開発中だから」という理由で直書きしたコードが、そのまま本番にデプロイされるケースは珍しくありません。
新しいアーキテクチャには新しいリスクがある
React Server ComponentsとApp Routerは、Next.jsの新しいアーキテクチャです。パフォーマンスやSEOの最適化には優れていますが、攻撃対象もより機密データに近づくことを意味します。
Unit 42のレポートでも指摘されていますが、RSCはロジックをデータソースに近づけることで効率化を図る一方で、攻撃対象も同時に近づけています。新しい技術を採用する際は、このトレードオフを理解しておく必要があります。
依存パッケージの脆弱性監視は必須
今回の脆弱性はReactの上流実装に起因しています。Next.jsを使っている以上、Reactの問題がNext.jsに波及するのは避けられません。
npm audit、Dependabot、Snykなど、依存パッケージの脆弱性を自動検知する仕組みを導入しておくことを強くお勧めします。
N-day脆弱性の悪用は極めて速い
Unit 42のレポートによると、CL-STA-1015のような攻撃グループは、N-day脆弱性(公開済みの脆弱性)を極めて迅速に悪用する傾向があります。「週末に対応しよう」では遅いのです。
—
まとめ:今すぐやるべきこと
脆弱性の概要:
– React2Shell(CVE-2025-55182):CVSS 10.0のRCE脆弱性
– 追加脆弱性:DoS(High)とソースコード漏洩(Medium)
– 攻撃は現在進行中
影響を受ける環境:
– App Routerを使用するNext.js 13.3以降
– React 19.x系を使用するすべてのRSC対応フレームワーク
対処方法:
– 修正済みバージョンへのアップデート(ワークアラウンドなし)
今すぐやること:
1. 自分のプロジェクトのNext.jsバージョンを確認
2. 修正済みバージョンへアップデート
3. コード内にハードコードされたシークレットがないか確認
4. 不審なアクセスログがないか確認
# バージョン確認
npm list next
# インタラクティブツールで確認・修正
npx fix-react2shell-next
本番環境で動いているサービスがあるなら、今すぐ対応してください。週末を待つ必要はありません。攻撃はすでに始まっています。
—
参考リンク
– React公式ブログ:Critical Security Vulnerability in React Server Components
– React公式ブログ:Denial of Service and Source Code Exposure(追加脆弱性)
– Next.js公式ブログ:Security Update December 11, 2025
– Unit 42:Exploitation of Critical Vulnerability in React Server Components
– fix-react2shell-next(Vercel公式ツール)
– CVE-2025-55182(RCE)
– CVE-2025-55183(ソースコード漏洩)
– CVE-2025-55184(DoS)
– CVE-2025-67779(DoS完全修正)


