15
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CVE-2025-55182:React Server Componentsにおけるサーバーサイドプロトタイプ汚染とリモートコード実行の技術的深層

Posted at

2025年12月初頭、現代のウェブ開発において事実上の標準となっている React、およびその主要フレームワークである Next.js を揺るがす極めて深刻な脆弱性が公開された。
それが CVE-2025-55182、通称 React2Shell である。

本脆弱性は CVSS 10.0(最高値)と評価され、
認証不要・単一リクエストでサーバー上の任意コード実行(RCE)が可能 という、最悪クラスの性質を持つ。

この記事では、この脆弱性の技術的本質、攻撃メカニズム、影響範囲、実際に観測された攻撃、そして防御戦略について、可能な限り深く整理する。

脆弱性の背景:React Server Componentsという転換点

React 19 の登場とともに、React Server Components(RSC) は「実験的機能」から事実上の標準アーキテクチャへと移行した。

RSCは以下を目的として設計されている。

  • サーバー側でコンポーネントをレンダリング
  • 結果をシリアライズしてクライアントへ送信
  • クライアント側JavaScriptの負荷を削減

この設計自体は合理的だが、
サーバーとクライアントの間でシリアライズされたデータをやり取りする という点が、新たな攻撃対象領域を生み出した。

CVE-2025-55182の本質

CVE-2025-55182は、RSC内部で使用される Flightプロトコル における、

  • 不十分な入力検証
  • 危険なデシリアライズ処理

に起因する サーバーサイド・プロトタイプ汚染 の脆弱性である。

攻撃者は、悪意のある Flight 形式のリクエストを送信することで、

  • Object.prototype を汚染
  • その結果として Node.js 実行環境で任意コードを実行

できてしまう。

しかもこの攻撃は 認証不要 で成立する。

プロトタイプ汚染とは何が危険なのか

JavaScriptのすべてのオブジェクトは Object.prototype を継承している。

プロトタイプ汚染では、攻撃者が以下のような特殊プロパティを悪用する。

  • proto
  • constructor
  • prototype

これにより、

  • 全オブジェクトに新たなプロパティを注入
  • 本来存在しないメソッド参照を成立させる

といった状態を作り出せる。

問題となったReact内部ロジック

修正前のReact内部では、以下のような処理が存在していた。

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = parcelRequire(metadata);
  return moduleExports[metadata[NAME]];
}

metadata[NAME] の値に対する検証が存在しないため、

  • "proto"
  • 汚染済みプロパティ名

を指定されると、プロトタイプチェーンを遡った参照が成立してしまう。

これがRCEへと直結した。

Flightプロトコルの悪用

攻撃者は Flight プロトコルを模倣した HTTP リクエストを送信する。

典型的な特徴は以下の通り。

  • HTTPヘッダに next-actionrsc-action-id
  • ボディに $@resolved_model
  • プロトタイプ操作文字列(例: $1:__proto__:then
  • Node.js 内部APIを呼び出すペイロード

結果として、child_process.execSync 等が呼び出され、
OSコマンド実行が成立する。

影響範囲の広さ

この脆弱性が特に危険なのは、

「開発者がサーバー関数を書いていなくても脆弱」

という点にある。

RSC対応構成であれば、ボイラープレートですら攻撃対象になる。

影響を受ける主要パッケージ

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

いずれも 19.0〜19.2 系が影響を受け、
修正は 19.0.1 / 19.1.2 / 19.2.1 以降で行われた。

フレームワークへの影響

  • Next.js 15.x / 16.x(App Router 使用時)
  • Waku
  • @vitejs/plugin-rsc
  • @parcel/rsc など

Wiz Research の調査では、
クラウド環境の約 39% に脆弱な RSC インスタンスが存在していたとされる。

実際に観測された攻撃

脆弱性公開から 数時間以内 に in-the-wild 攻撃が確認された。

攻撃の流れ

  • PoC公開
  • 自動スキャンの急増
  • マイナー・バックドア配布
  • 標的型侵害の発生

観測された事後活動

  • whoami / id による権限確認
  • SSH 永続化
  • XMRig によるマイニング
  • クラウドIMDS経由の権限奪取
  • OpenAI APIキー等の探索

RCEの起点から、クラウド全体の侵害へ拡大するケースも確認された。

対策と防御戦略

最優先:パッチ適用

  • React関連パッケージを修正版へ更新
  • Next.js は 15.0.5 以降を使用

これは唯一の根本対策である。

暫定的緩和策

  • WAFでFlight特有文字列を検知
  • Node.js プロセスからの異常な子プロセス生成監視
  • /tmp や /dev/shm の不審ファイル確認

アーキテクチャ上の防御

  • エグレス通信制限
  • IMDSv2 強制
  • 実行ユーザーの最小権限化

この脆弱性が示す本質的な警告

React2Shellは単なる実装ミスではない。

  • フロントエンドとバックエンドの境界消失
  • 「デフォルトで脆弱」という構造的問題
  • AI時代のクレデンシャル窃取加速

RSCのような仕組みは、
一つのデシリアライズミスが即RCEになる 世界を作り出した。

結論

CVE-2025-55182は、2025年を象徴する脆弱性として記憶されるだろう。

重要なのは、

  • 新技術は必ず攻撃面を拡張する
  • フレームワークを「信頼しすぎない」
  • 継続的な監視と最小権限設計

パッチ適用は一度きりだが、
防御姿勢は継続的でなければならない。

React2Shellは、その現実を突きつけた事例だった。

15
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?