【緊急】CVSS 10.0!たった1リクエストでサーバー完全掌握される「React2Shell」の恐怖【React/Next.js】
「React v19 や Next.js v15 をとりあえず試してみた」
そんな軽い気持ちでデプロイしたサーバーが、今この瞬間も世界中から狙われています。
先日公開された脆弱性 CVE-2025-55182 (React2Shell) は、近年稀に見る CVSSスコア 10.0 (Critical) という最大級の危険度を叩き出しました。
今回は、この「1リクエストでサーバーを乗っ取る」衝撃的な脆弱性をローカルで再現し、その恐ろしさを目の当たりにした結果を共有します。今すぐ対策してください。
何がそんなにヤバいのか?
一言で言えば、「React Server Components (RSC) の裏口が開いていた」 状態です。
通常、Webアプリケーションは厳重なバリデーションで守られています。しかし、React の内部通信プロトコル(Flight)のデシリアライズ処理に穴がありました。
攻撃者は、ブラウザも、ログイン画面も、認証トークンも必要としません。
ただ 1つ の巧妙なテキストデータを送りつけるだけで、あなたのサーバーで rm -rf / でも env 抜き取りでも、何でも実行できてしまうのです。
ローカル検証:サーバーが「死ぬ」瞬間
実際に、脆弱なバージョン(React 19.0.0 / Next.js 15.1.0)でアプリを構築し、攻撃コード(PoC)を実行してみました。
1. ターゲット(脆弱なアプリ)
// package.json (一部抜粋)
"dependencies": {
"react": "19.0.0", // 💣 VULNERABLE
"next": "15.1.0" // 💣 VULNERABLE
}
2. 攻撃コード (Exploit)
サーバーのコンソールに「PWNED」と表示させるだけの"無害な"攻撃コードを用意しました。しかし、ここを書き換えればランサムウェアの設置も一瞬です。
// exploit.js
const payload = {
// ...Flightプロトコルの解析不能な深淵...
'4': {
'_prefix': "console.log('💀 PWNED_BY_CVE_2025_55182 💀');//",
}
}
// POSTリクエストを投げるだけ
fetch('http://localhost:3000', { method: 'POST', body: ... });
3. 実行結果
ローカルで node exploit.js を叩いた瞬間、Next.js のログに衝撃の文字列が刻まれました。
> next dev --turbopack
(中略)
✓ Ready in 1677ms
💀 PWNED_BY_CVE_2025_55182 💀
VULNERABILITY VERIFIED
一瞬です。
何のエラーも吐かず、ファイアウォールも検知できず(通常のHTTP通信に見えるため)、サーバー内部で攻撃者のコードが走り抜けました。
これが本番環境だったら……想像するだけでゾッとします。
あなたが今すぐやるべきこと
議論している暇はありません。アップデートしてください。
この脆弱性は「設定ミス」ではありません。「ライブラリ自体の欠陥」です。あなたがどれだけ安全なコードを書いていても、React/Next.js のバージョンが古ければアウトです。
修正バージョン
-
React:
19.0.1以上 -
Next.js:
15.1.2以上 (または最新のパッチ)
npm install react@latest react-dom@latest next@latest
最後に
「最新技術だから触ってみたい」という好奇心は素晴らしいですが、エコシステムの初期段階にはこうした"地雷"が埋まっていることがあります。
今回の CVE-2025-55182 は、文字通りサーバーの鍵を全世界に配っているようなものです。
まだ対応していないプロジェクトがあれば、今すぐ確認してください。
明日の朝、あなたのサーバーがあなたの物でなくなっている前に。
Discussion