🤔

【緊急】React2Shell(CVE-2025-55182)とは?あなたのアプリは大丈夫?

に公開

はじめに

2025年12月3日、ReactにCVSS 10.0(最大深刻度) の脆弱性が公開されました。

「React2Shell」と呼ばれるこの脆弱性、名前の由来はあの悪名高い「Log4Shell」。それほどヤバいということです。

この記事では、何が起きているのか、自分のアプリは大丈夫なのかをわかりやすく解説します。

結論から

影響を受けるのはこんなアプリ👇

条件 影響
React 19.0〜19.2.0を使用 ⚠️ 危険
Next.js 15.x / 16.x(App Router) ⚠️ 危険
React Router(RSC APIs使用時) ⚠️ 危険
React 18以下 ✅ 安全
Vite + React(CSR) ✅ 安全
Next.js Pages Router ✅ 安全

何が起きたの?

SSRとRSCは違う

まず、よくある誤解を解いておきます。

❌ 「SSRがヤバい」
⭕ 「RSC(React Server Components)がヤバい」
用語 意味 今回の脆弱性
SSR サーバーでHTMLを生成して返す 関係なし
RSC コンポーネント自体をサーバーで実行(React 19新機能) これが問題

脆弱性の仕組み

React 19のRSCには、サーバーとクライアント間でデータをやり取りする**「Flight」プロトコル**があります。

[ブラウザ] ←── Flightプロトコル ──→ [サーバー]
           (シリアライズ/デシリアライズ)

問題は、攻撃者が細工したHTTPリクエストを送ると、サーバー側でデータを復元(デシリアライズ)する際に任意のコードが実行されてしまうこと。

わかりやすく例えると

📦 普通の荷物 → サーバーが開封 → 正常に処理

💣 爆弾入りの荷物 → サーバーが開封した瞬間に爆発
                   → サーバー乗っ取り完了

これが「Unsafe Deserialization(安全でないデシリアライズ)」という古典的かつ致命的な脆弱性パターンです。

なぜ深刻度MAXなのか

  • 🔓 認証不要 - ログインしてなくても攻撃可能
  • 🎯 デフォルトで脆弱 - create-next-appで作っただけで危険
  • 💯 成功率ほぼ100% - 攻撃が非常に安定している
  • 👑 完全な乗っ取り - サーバー上で任意のコード実行可能

公開から数時間で、中国の国家支援グループによる攻撃が観測されています。

あなたのアプリは大丈夫?

チェックリスト

1. package.jsonを確認

// 🚨 危険なパターン
"react": "^19.0.0"
"next": "^15.0.0"

// ✅ 安全なパターン
"react": "^18.2.0"

2. フレームワークを確認

# Next.jsのバージョン確認
npx next --version

3. RSCを使っているか確認

Next.js App Routerを使っていて、app/ディレクトリがあれば要注意。

安全なケース

以下の場合は影響を受けません:

  • React 18以下を使用
  • Vite + Reactでクライアントサイドレンダリング
  • Create React App(CRA)
  • Next.js Pages Router(pages/ディレクトリ)のみ使用
  • Gatsby、Remixなど(RSC未対応のフレームワーク)

対処法

React

# 修正済みバージョンにアップデート
npm install react@19.0.1 react-dom@19.0.1
# または
npm install react@19.1.2 react-dom@19.1.2
# または
npm install react@19.2.1 react-dom@19.2.1

Next.js

# 使用中のメジャーバージョンに応じて
npm install next@15.0.5
npm install next@15.1.9
npm install next@15.2.6
npm install next@15.3.6
npm install next@15.4.8
npm install next@15.5.7
npm install next@16.0.7

その他のフレームワーク

  • React Router: RSC APIsを使用している場合は最新版へ
  • Waku, RedwoodSDK, Expo: 各プロジェクトの公式アナウンスを確認

追加の脆弱性(12/10追加)

React2Shell以外にも、関連する脆弱性が追加で公開されています:

CVE 深刻度 内容
CVE-2025-55182 Critical (10.0) RCE(今回のメイン)
CVE-2025-55183 Medium (5.3) ソースコード露出
CVE-2025-55184 High (7.5) DoS攻撃

すべて最新版で修正されているので、アップデートすれば対処完了です。

WAFでの一時的な保護

すぐにアップデートできない場合、WAF(Web Application Firewall)での保護も有効です:

  • Cloudflare: Managed Rulesetに保護ルールが追加済み
  • AWS WAF: AWSManagedRulesKnownBadInputsRuleSet v1.24以上
  • Google Cloud: Cloud Armorに保護ルール追加済み

ただし、これは一時的な対策です。根本的な修正はアップデートのみ。

タイムライン

日付 出来事
11/29 脆弱性がMetaに報告される
11/30 Metaが確認、修正開始
12/1 修正パッチ作成、主要プロバイダーと連携
12/3 npmに修正版公開、CVE公開
12/3 公開から数時間で攻撃観測
12/5 大規模な攻撃キャンペーン開始

まとめ

  • React 19 + RSCを使っているなら今すぐアップデート
  • React 18以下なら安全
  • ViteやCRAなどクライアントサイドのみなら安全
  • 公開PoCが出回っており、攻撃は現在進行形

React 19への移行を検討している方は、必ず修正済みバージョン(19.0.1以上)を使いましょう。

参考リンク

Discussion