1.脆弱性の概要
脆弱性番号: CVE-2025-55182
脆弱性タイプ:: リモートコード実行 (RCE)
脆弱性レベル:: クリティカル
影響範囲Next.js、React Server Components関連フレームワークおよびライブラリ
発見の時期:: 2025
復旧状況:: リリースされたパッチ
CVE-2025-55182 は、Next.js フレームワークおよびその依存ライブラリに影響する、リモートでコードが実行される重大な脆弱性です。この脆弱性は、Next.js App Router における React Server Components (RSC) のシリアライズデータの処理におけるチェックサムの不備に起因しており、攻撃者は悪意のある RSC リクエストを作成することで、サーバー側で任意のコードを実行することが可能です。
2.脆弱性の説明
2.1 技術的背景
Next.jsはReactをベースとしたオープンソースのウェブフレームワークで、サーバーサイドレンダリング(SSR)、静的サイト生成(SSG)、ハイブリッドレンダリングのアプリケーションを構築するために広く使用されています。React Server Components(RSC)はReact 19で導入された機能で、開発者はコンポーネントロジックをサーバー上で直接実行し、コンポーネントの状態をクライアントにシリアライズすることができます。コンポーネントの状態をクライアントにシリアライズします。
2.2 脆弱性のトリガー条件
この脆弱性は、Next.jsにおいて以下の条件によって引き起こされる。
-
Next.jsバージョンはReact 19を使用(早ければ2024年5月に統合開始)
-
アプリケーションはApp Routerのルーティングメソッドを使用します。
-
顧客からの RSC シリアルデータに対する適切なセキュリ ティチェックの不備
2.3 特定の症状
脆弱性の核心問題で。
-
Next.jsは、クライアントから送信されたRSCシリアライズデータを直接受け取り、ReactFlightReplyServerに渡してデシリアライズします。
-
モデル構造、参照パス、Server Referenceメタデータの適切な検証の欠如
-
RSC 解析リンクの複数の主要な関数(parseModelString、getOutlinedModel、loadServerReference、initializeModelChunk など)が、データの正当性を効果的に検証できていない。
-
攻撃者は、慎重に構築された悪意のあるRSCリクエストによって、モジュールのロードと参照バインディングの段階でコールターゲットを制御することができる。
3.脆弱性の原理と原因
3.1 RSCデシリアライズワークフロー
React Server Componentsの通信メカニズムには、次のような重要なステップがある。
-
連載段階サーバー・コンポーネントはサーバー側で実行され、その状態は特定のフォーマットにシリアライズされてクライアントに送信される。
-
トランスミッションステージシリアライゼーション・データはネットワークを介してクライアントに転送される。
-
デシリアライズ段階クライアントがデータを受け取り、Reactコンポーネントの状態にデシリアライズする。
3.2 脆弱性の原因分析
この脆弱性の原因には以下のようなものがある。
構造的校正の欠如RSC のシリアル化されたデータのモデル構造は十分に検証されていないため、攻撃者は意図しないデータ構造を注入することができる。
引用経路制御の欠陥loadServerReference関数は、Server Referenceをロードする際に参照パスの厳密なセキュリティチェックを行わないため、攻撃者はロード可能な任意のモジュールを指すことができます。
メタデータの検証が不十分このメタデータのチェックサムが不十分だと、攻撃者は安全でない関数を指すことができます。
デシリアライザーの信頼問題ReactFlightReplyServerは、デシリアライズされたオブジェクトに対して実行される操作を信頼しすぎており、ユーザー入力を処理するためにparseModelStringやgetOutlinedModelなどの関数を直接呼び出している。
3.3 アタック・チェーン分析
攻撃者の悪用リンクは以下の通り。
悪意のあるRSCリクエスト
↓
parseModelString (データフォーマットの解析)
↓
getOutlinedModel (モデルget)
↓
loadServerReference(ロードサーバー参照)
↓
initializeModelChunk
↓
制御関数呼び出しターゲット
↓
任意のコード実行
上記のリンクでは、攻撃者は複数のポイントで悪意のあるデータを注入することができ、その結果、次のようなことが起こる。
-
意図しないモジュールのロード
-
意図しない関数の呼び出し
-
悪意のあるパラメータを渡す
-
最終的にはサーバー側で任意のコードを実行
4.脆弱性の影響とハザード
4.1 直接的な影響
リモートコード実行:: 攻撃者は認証なしでサーバー側で任意のコードを実行することができる。
サーバーは完全にダウンしている。Node.jsプロセスと同じ権限を持つ攻撃者は、以下のことが可能です。
-
アプリケーションによって保存された機密データへのアクセス(データベース認証情報、API キー、ユーザデータなど)。
-
サーバー上のデータを変更または削除する
-
執拗なコントロールのためのバックドア手順の設置
-
さらなるイントラネット攻撃を仕掛けるために使われる
データ侵害攻撃者はサーバーに保存されているすべての機密情報にアクセスし、盗むことができる。
4.2 影響を受けるユーザーグループ
この脆弱性は以下の人々に影響を与える。
-
影響を受けるバージョンのNext.jsを使用するすべてのプロダクションアプリケーション
-
関連するReact Server Componentsライブラリを使用するプロジェクト(react-server-dom-webpack、react-server-dom-turbopack、react-server-dom-parcel)
-
Next.jsで構築されたWebアプリケーションのユーザー
-
Difyのようなローコードプラットフォームのユーザー
4.3 物理的脅威の評価
この脆弱性には次のような特徴があり、実際の脅威は高い。
-
使いやすい攻撃者は、慎重に構築されたHTTPリクエストを送信するだけである。
-
認証不要:: 有効なユーザーIDを必要としないエクスプロイト
-
こうはんいNext.jsとReactは、ウェブ開発における支配的なフレームワークであり、さまざまな影響を及ぼしている。
-
高度な自動化自動化されたツールは、一括スキャンと活用のために書くことができる。
5.脆弱なPOC/EXP
5.1 Exploit Principlesの例
次のコードは、攻撃者が考えうる悪用のアイデアを示している(教育目的のみ)。
// 悪意のあるRSCシリアライゼーション・リクエストを構築する
// RSCフォーマットの例:D{シリアライズされたデータ}T{サーバー側参照}。
// 攻撃者が構築可能な悪意のあるペイロード構造。
const maliciousRSCPayload = {
// モデルの構造と参照パスを制御することによって
model: {
// 安全でないモジュールを指す
$$ype:"@@MODULE_REFERENCE"、
id: ".../.../server/sensitive-module"、
name: "dangerousFunction"
},
// 悪意のあるパラメータを渡す
args: [
"require('child_process').execSync('malicious-command')"
]
};
// App Routerインターフェースに悪意のあるリクエストを送信する。
fetch('/api/rsc', {)
メソッド: 'POST'、
body: serializeRSC(maliciousRSCPayload)
});
5.2 主要な攻撃ベクトル
ベクトル 1 - モジュールパスのトラバーサル:
パス・トラバーサルを含む文字を構成することにより(例./....../)を使用することで、期待される範囲外のモジュールをロードすることができます。
ベクター2 - サーバー・リファレンス・フェイク:
loadServerReference が任意の関数をロードして実行するように、偽の Server Reference メタデータを作成します。
ベクター 3 - パラメータ・インジェクション:
シリアライズされたデータに悪意のあるパラメータを注入し、それをデシリアライズして関数呼び出しで直接使用する。
5.3 検出方法
この脆弱性が悪用されるかどうかは、以下の方法でテストできる。
# Next.jsのバージョンを確認する
npm list next
# アプリケーションログに異常なRSC要求がないかチェックする。
# リクエストボディが以下の特性を含むPOSTリクエストに関する。
# - システムモジュールを指す MODULE_REFERENCE
# - パストラバーサルシンボルを含む (.../.../)
# - 異常なサーバー・リファレンス・メタデータ
# プロセスの実行を監視し、子プロセスの異常起動をチェックする。
6. リハビリテーションの提案またはプログラム
6.1 公式な修正
Next.jsは、React Server Components関連の依存関係をアップグレードし、修正されたRSC解析ポータルにバインドすることで、脆弱性を公式に解消した。修正の主な改善点は以下のとおりです。
データ検証の強化:: デシリアライズの前にRSCデータの構造を厳密にチェックする。
安全なモジュールのロード: loadServerReference関数は、ホワイトリストのメカニズムを実装し、期待されるモジュールだけがロードされるようにします。
元データセキュリティ检查サーバー・リファレンスのメタデータは、署名やその他のセキュリティ・メカニズムによって検証される。
エラー処理の改善異常なデータは処理しようとせず、安全に拒否する。
6.2 緊急修理の手順
ステップ1 - 今すぐ依存関係をアップグレードする:
# Next.jsの固定バージョンへのアップグレード
npm update next@latest
# React Server Components関連ライブラリの同期アップデート
npm update react-server-dom-webpack
npm update react-server-dom-turbopack
npm update react-server-dom-parcel
# Dify をお使いの場合は、1.10.1-fix.1 以降にアップグレードしてください。
npm update dify
ステップ2 - 完全版対応表:
Next.jsのバージョンブランチが異なる場合は、以下の最小限の修正にアップグレードしてください。
| 対象バージョンの範囲 | 復元版 | 優先順位 |
|---|---|---|
| 15.1.1-カナリア.0~15.1.9 | 15.1.9 | 御前 |
| 14.3.0-canary.77 ~ 15.0.5 | 15.0.5 | 御前 |
| 15.5.1-カナリア.0~15.5.7 | 15.5.7 | 御前 |
| 15.2.0-canary.0 ~ 15.2.6 | 15.2.6 | 御前 |
| 15.3.0-canary.0 ~ 15.3.6 | 15.3.6 | 御前 |
| 15.4.0-canary.0 ~ 15.4.8 | 15.4.8 | 御前 |
| 16.0.0-canary.0 ~ 16.0.7 | 16.0.7 | 御前 |
React Server Components ライブラリ修正版:
| 図書館名 | 影響を受けるバージョン | 復元版 |
|---|---|---|
| react-server-dom-webpack | 19.0 ~ 19.0.1 | 19.0.1 |
| 19.1.0 ~ 19.1.2 | 19.1.2 | |
| 19.2.0 ~ 19.2.1 | 19.2.1 | |
| react-server-dom-turbopack | 19.0 ~ 19.0.1 | 19.0.1 |
| 19.1.0 ~ 19.1.2 | 19.1.2 | |
| 19.2.0 ~ 19.2.1 | 19.2.1 | |
| react-server-dom-parcel | 19.0 ~ 19.0.1 | 19.0.1 |
| 19.1.0 ~ 19.1.2 | 19.1.2 | |
| 19.2.0 ~ 19.2.1 | 19.2.1 | |
| ディファイ | 0 ~ 1.10.1 | 1.10.1-fix.1 |
ステップ 3 - アップグレードの確認:
#フラッシュ依存キャッシュ
rm -rf node_modules package-lock.json
# 依存関係を再インストールする
npmインストール
#検証版
npm list next react-server-dom-webpack
#再起動アプリケーション
npm run build
npm スタート
6.3 長期防衛戦略
コード監査:
-
App RouterのRSC関連コードのレビュー
-
カスタムデシリアライズロジックのチェック
-
安全上の危険がないことを確認する。
アクセス制御:
-
APIエンドポイントへのアクセスを制限する(可能であれば)
-
IPベースのアクセス制御の実装
-
異常なRSCリクエストを検出するWAFルールの導入
モニタリングとロギング:
-
詳細なアプリケーション・ロギングの有効化
-
異常なHTTPリクエストパターンを監視する
-
RCEの試みを検出するための警告ルールの設定
依存関係の管理:
-
依存パッケージを定期的にアップデートする
-
npm auditでセキュリティの脆弱性をチェックする
-
ソフトウェア構成分析(SCA)ツールの使用を検討する。
セキュリティのベストプラクティス:
-
最小権限の原則に従って、Node.js プロセスの権限を制限する。
-
コンテナまたはサンドボックス環境でのアプリケーションの実行
-
定期的なセキュリティ・テストと侵入テスト
6.4 暫定的緩和策(アップグレード前)
何らかの理由で早急なアップグレードが不可能な場合、リスクを軽減するために以下の暫定措置をとることができる。
// ミドルウェアにRSCリクエスト検証を追加する
エクスポート関数 middleware(request) {
// 不審なRSCリクエストを検出する
if (request.nextUrl.pathname.includes('/rsc') ||)
request.headers.get('rsc') === 'true') { {.
// リクエストボディの疑わしいパターンをチェックする
const body = request.body;
// パストラバーサルまたは例外参照を含むリクエストを拒否する
if (body.includes('.../.../') ||
body.includes('MODULE_REFERENCE')||。
ボディ.includes('eval')) {。
return new Response('Forbidden', { status: 403 });
}
}
NextResponse.next()を返す;
}
重要な注意事項:: 暫定的な対策はリスクを軽減するだけであり、脆弱性の脅威を完全に排除するものではありません。できるだけ早く正式な修正プログラムにアップグレードしてください。
7.参考文献
参照リソース:
-
Next.js GitHub Repository - セキュリティ勧告。 https://github.com/vercel/next.js/security/advisories
-
React Server Components ドキュメント。 https://react.dev/reference/rsc/server-components
-
CVE-2025-55182公式詳細。 https://nvd.nist.gov/vuln/detail/CVE-2025-55182
関連アイテム:
-
Next.js公式サイト。 https://nextjs.org/
-
React公式ドキュメント。 https://react.デヴ/
-
DifyのGitHubリポジトリとリリースノート。 https://github.com/langgenius/dify/releases/tag/1.10.1-fix.1
セキュリティ・リファレンス:
-
OWASP コード・インジェクション https://owasp.org/www-community/attacks/Code_Injection
-
CWE-94:コード生成の不適切な制御(コードインジェクション) https://cwe.mitre.org/data/definitions/94.html
-
Node.jsセキュリティのベストプラクティス。 https://nodejs.org/en/docs/guides/security/
元記事はChief Security Officerによるもので、転載の際はhttps://www.cncso.com/jp/cve-2025-55182-react-server-components-rce.html。
