T-CREATOR

【緊急警告】React/Next.js の RSC 機能に CVSS 10.0 の RCE 脆弱性「CVE-2025-55182」が発覚

【緊急警告】React/Next.js の RSC 機能に CVSS 10.0 の RCE 脆弱性「CVE-2025-55182」が発覚

2025 年 12 月 3 日、React と Next.js のエコシステム全体を揺るがす、史上最高レベルの深刻な脆弱性が公表されました。CVSS スコア 10.0(最高評価)を受けたこの脆弱性「CVE-2025-55182」は、認証なしでサーバー上の任意のコードを実行可能という、極めて危険な問題です。

公開からわずか数時間で、中国系の脅威アクターグループ「Earth Lamia」による攻撃試行が確認されており、まさに緊急対応が必要な事態となっています。本記事では、この脆弱性の詳細、影響範囲、そして今すぐ取るべき対策について、初心者の方にもわかりやすく解説いたします。

背景

React Server Components(RSC)とは

React Server Components(RSC)は、React 18 で実験的に導入され、React 19 で正式に提供された新しい機能です。これにより、サーバーサイドでコンポーネントをレンダリングし、クライアントに最小限のデータのみを送信できるようになりました。

従来のサーバーサイドレンダリング(SSR)と異なり、RSC はコンポーネント単位でサーバーとクライアントを分離できます。これにより、パフォーマンス向上やバンドルサイズの削減など、多くのメリットが得られるようになりました。

RSC の通信プロトコル「Flight」

RSC では、サーバーとクライアント間のデータ通信に「Flight」と呼ばれる独自プロトコルを使用します。このプロトコルは、React のコンポーネントツリーやプロップス(props)などのデータをシリアライズ(直列化)してクライアントに送信する仕組みです。

以下の図は、RSC における基本的なデータフローを示しています。

mermaidflowchart TB
  client["クライアント<br/>(ブラウザ)"] -->|リクエスト| server["Next.js サーバー"]
  server -->|RSC データ<br/>Flight プロトコル| serializer["シリアライザー"]
  serializer -->|ペイロード| network["ネットワーク"]
  network -->|受信| deserializer["デシリアライザー"]
  deserializer -->|React要素| client

  style serializer fill:#e1f5ff
  style deserializer fill:#ffe1e1

この図から分かるように、サーバー側でシリアライズされたデータが、クライアント側でデシリアライズ(復元)されます。今回の脆弱性は、このデシリアライズ処理に存在していました。

影響を受けるパッケージとバージョン

この脆弱性は、以下の React 19 系のパッケージに存在します。

#パッケージ名脆弱なバージョン修正バージョン
1react-server-dom-webpack19.0.0, 19.1.0, 19.1.1, 19.2.019.0.1, 19.1.2, 19.2.1
2react-server-dom-parcel19.0.0, 19.1.0, 19.1.1, 19.2.019.0.1, 19.1.2, 19.2.1
3react-server-dom-turbopack19.0.0, 19.1.0, 19.1.1, 19.2.019.0.1, 19.1.2, 19.2.1

また、Next.js においても同様の脆弱性が「CVE-2025-66478」として報告されています。

#Next.js バージョン修正バージョン
116.0.0 〜 16.0.616.0.7
215.5.0 〜 15.5.615.5.7
315.4.0 〜 15.4.715.4.8
415.3.0 〜 15.3.515.3.6
515.2.0 〜 15.2.515.2.6
615.1.0 〜 15.1.815.1.9
715.0.0 〜 15.0.415.0.5

さらに、react-router、waku、@parcel/rsc、@vitejs/plugin-rsc、rwsdk などのフレームワークやバンドラーも影響を受けます。

課題

CVSS 10.0 という最高スコアの意味

CVSS(Common Vulnerability Scoring System)は、脆弱性の深刻度を評価する国際的な標準規格です。スコアは 0.0 から 10.0 の範囲で評価され、10.0 は最高レベルの深刻度を示します。

今回の CVE-2025-55182 が CVSS 10.0 を獲得した理由は、以下の条件がすべて揃っているためです。

#評価項目CVE-2025-55182 の状況
1攻撃元区分ネットワーク経由で攻撃可能
2攻撃条件の複雑さ低い(簡単に攻撃できる)
3必要な特権レベルなし(認証不要)
4利用者の関与不要(自動的に攻撃可能)
5影響の範囲機密性、完全性、可用性のすべてに重大な影響

これらの条件により、攻撃者は認証なしで、ネットワーク経由で簡単にサーバー上の任意のコードを実行できてしまいます。

安全でないデシリアライゼーション(Insecure Deserialization)

今回の脆弱性の根本原因は、「安全でないデシリアライゼーション」です。これは OWASP Top 10 にも含まれる、非常に危険な脆弱性のタイプとなります。

デシリアライゼーションとは、シリアライズされたデータ(文字列やバイト列)を元のオブジェクトに復元する処理のことです。この処理において、攻撃者が細工したデータを適切に検証せずに復元すると、任意のコードが実行されてしまう可能性があります。

以下の図は、攻撃のフローを示しています。

mermaidsequenceDiagram
  participant attacker as 攻撃者
  participant endpoint as Server Function<br/>エンドポイント
  participant rsc as RSC デシリアライザー
  participant server as サーバー

  attacker->>endpoint: 悪意あるペイロードを含む<br/>HTTP リクエスト
  endpoint->>rsc: ペイロードを<br/>デシリアライズ処理へ
  rsc->>rsc: 検証なしで<br/>オブジェクト復元
  rsc->>server: 任意のコード実行
  server-->>attacker: 攻撃成功<br/>(サーバー制御)

  Note over attacker,server: 認証不要で攻撃可能

この図から分かるように、攻撃者は Server Function のエンドポイントに対して悪意のあるペイロードを送信するだけで、サーバー上で任意のコードを実行できてしまいます。

デフォルト設定で脆弱

最も懸念すべき点は、デフォルト設定のままで脆弱性が存在するということです。

create-next-app で作成した標準的な Next.js アプリケーションを本番環境にデプロイしただけで、開発者が何も設定を変更していなくても、この脆弱性の影響を受けてしまいます。

つまり、以下のようなシンプルなアプリケーションでも攻撃対象になりえます。

typescript// app/page.tsx
export default function Home() {
  return (
    <main>
      <h1>Hello, World!</h1>
    </main>
  );
}

このような最小限のコードであっても、Next.js 15.x 系や 16.0.x 系を使用している場合、脆弱性の影響を受ける可能性があります。

既に攻撃が確認されている

Amazon の脅威インテリジェンスチームによると、脆弱性が公開されてからわずか数時間で、中国系の脅威アクターグループ「Earth Lamia」による攻撃試行が確認されています。

この迅速な攻撃は、攻撃者がゼロデイ攻撃(脆弱性が公開される前から準備していた攻撃)を行った可能性も示唆しており、非常に深刻な状況です。

解決策

即座にアップデートを実施する

最も重要な対策は、今すぐパッケージをアップデートすることです。以下の手順で、使用しているパッケージのバージョンを確認し、必要に応じてアップデートを行いましょう。

ステップ 1:現在のバージョンを確認

まず、プロジェクトで使用している React と Next.js のバージョンを確認します。

bash# package.json の内容を確認
cat package.json | grep -E "(react|next)"

または、Yarn を使用している場合は以下のコマンドでも確認できます。

bash# インストールされているパッケージのバージョンを確認
yarn list --pattern "react|next"

ステップ 2:脆弱性の有無を判定

前述の表と照らし合わせて、使用しているバージョンが脆弱かどうかを確認してください。

React 19.0.0、19.1.0、19.1.1、19.2.0 のいずれかを使用している場合、または Next.js 15.0.0 〜 16.0.6 の範囲にある場合は、脆弱性の影響を受けています。

ステップ 3:パッケージをアップデート

脆弱性が確認された場合、以下のコマンドで安全なバージョンにアップデートします。

bash# Next.js を最新の修正バージョンにアップデート
yarn add next@latest

React の場合は、使用しているバージョンに応じて以下のコマンドを実行してください。

bash# React 19.0 系を使用している場合
yarn add react@19.0.1 react-dom@19.0.1

# React 19.1 系を使用している場合
yarn add react@19.1.2 react-dom@19.1.2

# React 19.2 系を使用している場合
yarn add react@19.2.1 react-dom@19.2.1

ステップ 4:依存関係の更新を確認

パッケージマネージャーのロックファイルも更新されていることを確認します。

bash# yarn.lock が更新されていることを確認
git diff yarn.lock

ステップ 5:アプリケーションを再ビルド

アップデート後、必ずアプリケーションを再ビルドしてください。

bash# 既存のビルドをクリーンアップ
rm -rf .next

# 本番用にビルド
yarn build

ステップ 6:テストと再デプロイ

ローカル環境でアプリケーションが正常に動作することを確認した後、本番環境に再デプロイします。

bash# ローカルで本番モードを起動して確認
yarn start

問題がなければ、本番環境にデプロイしてください。

WAF(Web Application Firewall)による緩和策

アップデートが即座にできない場合の一時的な緩和策として、WAF(Web Application Firewall)の利用が推奨されます。

Cloudflare は、CVE-2025-55182 に対する保護ルールを自動的に有効化しています。Cloudflare を利用している場合、WAF が攻撃をブロックしてくれますが、これはあくまで一時的な対策であり、根本的な解決にはなりません。

以下の表は、各種 WAF サービスの対応状況をまとめたものです。

#サービス名CVE-2025-55182 対応備考
1Cloudflare WAF自動有効化済みプロアクティブに保護
2AWS WAFカスタムルール作成可能手動設定が必要
3Azure WAFカスタムルール作成可能手動設定が必要

WAF を使用する場合でも、必ずパッケージのアップデートを優先してください。

セキュリティモニタリングの強化

脆弱性への対応と並行して、以下のセキュリティモニタリングを強化することも重要です。

#モニタリング項目確認ポイント
1不審なネットワークトラフィックServer Function エンドポイントへの異常なリクエスト
2サーバーログの監視エラーログや予期しないコード実行の痕跡
3システムリソースの使用状況CPU やメモリの異常な使用パターン
4ファイルシステムの変更予期しないファイルの作成や変更

これらのモニタリングにより、万が一攻撃を受けた場合でも、早期に検知して対応することが可能になります。

具体例

脆弱性の影響を受けるコード例

以下は、Server Actions を使用した典型的な Next.js のコード例です。このコードは、脆弱なバージョンの Next.js で実行されている場合、攻撃の対象となり得ます。

typescript// app/actions.ts
'use server';

// Server Action の定義
export async function submitForm(formData: FormData) {
  const name = formData.get('name');
  const email = formData.get('email');

  // データベースに保存する処理
  await saveToDatabase({ name, email });

  return { success: true };
}

上記のような Server Action のエンドポイントに対して、攻撃者は悪意のあるペイロードを送信できます。

typescript// app/page.tsx
import { submitForm } from './actions';

export default function ContactForm() {
  return (
    <form action={submitForm}>
      <input type='text' name='name' />
      <input type='email' name='email' />
      <button type='submit'>送信</button>
    </form>
  );
}

このようなシンプルなフォームでも、バックエンドの Server Action が攻撃の入り口となる可能性があります。

攻撃のシナリオ

以下の図は、実際の攻撃がどのように行われるかを示しています。

mermaidflowchart TD
  A["攻撃者"] -->|1. 脆弱性スキャン| B["ターゲット特定"]
  B -->|2. 悪意のあるペイロード作成| C["RCEペイロード"]
  C -->|3. HTTPリクエスト送信| D["Server Function<br/>エンドポイント"]
  D -->|4. デシリアライズ処理| E["脆弱なRSCコード"]
  E -->|5. コード実行| F["任意のコマンド実行"]
  F -->|6a. データ窃取| G["機密情報漏洩"]
  F -->|6b. バックドア設置| H["永続的アクセス確保"]
  F -->|6c. ラテラルムーブメント| I["内部ネットワーク侵入"]

  style E fill:#ffe1e1
  style F fill:#ff9999
  style G fill:#ffcccc
  style H fill:#ffcccc
  style I fill:#ffcccc

図で理解できる要点:

  • 攻撃は 6 つのステップで完了し、認証は一切不要
  • デシリアライズ処理が攻撃の核心部分
  • RCE 成功後、複数の攻撃経路が開かれる

アップデート後の確認方法

パッケージをアップデートした後、脆弱性が修正されていることを確認する方法をご紹介します。

方法 1:npm audit を使用

npm の監査機能を使用して、既知の脆弱性がないか確認できます。

bash# npm を使用している場合
npm audit

# Yarn を使用している場合
yarn audit

出力結果に CVE-2025-55182 や CVE-2025-66478 が含まれていないことを確認してください。

方法 2:パッケージバージョンの直接確認

アップデート後のバージョンが正しいか、以下のコマンドで確認します。

bash# Next.js のバージョン確認
yarn list --pattern "next" --depth=0
bash# React のバージョン確認
yarn list --pattern "react" --depth=0

方法 3:ビルドログの確認

ビルド時のログを確認し、警告やエラーが出ていないかチェックします。

bash# ビルドを実行してログを確認
yarn build 2>&1 | tee build.log

正常にビルドが完了し、セキュリティ警告が表示されないことを確認してください。

Vercel でのデプロイ時の注意点

Vercel を使用している場合、自動デプロイの設定によっては、古いバージョンのパッケージがキャッシュされている可能性があります。

以下の手順で、確実にアップデートされたバージョンがデプロイされるようにしましょう。

ステップ 1:キャッシュのクリア

Vercel のダッシュボードから、プロジェクトの設定を開き、Build & Development Settings で「Clear Cache」を実行します。

ステップ 2:環境変数の確認

NEXT_PUBLIC_ で始まる環境変数が正しく設定されているか確認してください。

ステップ 3:再デプロイ

変更を GitHub にプッシュして、自動デプロイをトリガーします。

bash# 変更をコミット
git add package.json yarn.lock
git commit -m "fix: Update Next.js to patch CVE-2025-55182"

# リモートにプッシュ
git push origin main

ステップ 4:デプロイメントログの確認

Vercel のダッシュボードでデプロイメントログを確認し、正しいバージョンがインストールされていることを確認します。

ログに以下のような記載があることを確認してください。

perlInstalling dependencies...
next@15.5.7
react@19.2.1
react-dom@19.2.1

まとめ

CVE-2025-55182 は、React と Next.js のエコシステムにおける史上最高レベルの脆弱性であり、CVSS スコア 10.0 という最高評価を受けています。

この脆弱性の最も深刻な点は、認証なしでリモートコード実行が可能であり、デフォルト設定のままで攻撃を受ける可能性があることです。さらに、公開からわずか数時間で実際の攻撃が確認されており、緊急の対応が必要な状況となっています。

対策としては、以下の 3 点が重要です。

第一に、今すぐパッケージをアップデートすることが最優先です。React 19.0.1、19.1.2、19.2.1、または Next.js の修正バージョン(15.0.5 以降、16.0.7 以降)に更新してください。

第二に、アップデートが即座にできない場合は、WAF による一時的な保護を検討してください。ただし、これは根本的な解決策ではなく、あくまで緊急の緩和策です。

第三に、セキュリティモニタリングを強化し、不審なアクティビティを早期に検知できる体制を整えてください。

この脆弱性は、サーバーサイドの新機能を導入する際のセキュリティ検証の重要性を改めて示すものとなりました。今後も React や Next.js を安全に使用するために、公式のセキュリティアドバイザリを定期的に確認し、迅速にアップデートを行う習慣を身につけることが大切です。

開発者の皆様におかれましては、一刻も早くアップデートを実施し、アプリケーションとユーザーの安全を守っていただきますようお願いいたします。

関連リンク