🤔
【緊急】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