はじめにパラダイムシフトとその代償
現代のウェブ開発の進化は、シームレス化への競争であった。React Server Components(RSC)を搭載したNext.js 13+のApp Routerの導入は、クライアントとサーバーの境界が曖昧になって存在しない世界を約束した。開発者はUIコンポーネントから直接データベースクエリを呼び出すことができ、フレームワークが重い仕事を処理する。
しかしだ、 CVE-2025-66478 は残酷な現実の確認として到着した。致命的なCVSSスコアは 10.0このリモート・コード実行(RCE)脆弱性は、単なるコーディング・エラーではなく、現代のウェブを支えるシリアライゼーション・レイヤーに対する根本的な信頼性の侵害を意味する。
筋金入りのセキュリティ・エンジニアにとって、この脆弱性が重要なのは、ウェブ・セキュリティの標準的なメンタル・モデルを迂回するからである。不適切な文字列連結によるSQLインジェクションでもなければ、単純なXSSでもない。これは リアクト・フライト・プロトコル-サーバーとクライアントが会話するためのバイナリ言語。
このディープ・ダイブでは、この脆弱性のアーキテクチャを分解し、認証されていないRCEを可能にする特定のデシリアライゼーションのメカニズムを分析し、その理由を探る。 PenligentのようなAI主導の侵入テストプラットフォーム は、このような複雑なロジックの欠陥を、敵よりも先に体系的に特定できる唯一のツールである。

不安のアーキテクチャRSCフライトを理解する
CVE-2025-66478を悪用するには、まずNext.jsが使用する独自プロトコルを理解する必要があります。ユーザーがサーバーアクションとやりとりするとき(たとえば、フォームを送信するとき)、ブラウザは標準的なJSONペイロードを送信しません。代わりに、Reactのハイドレーション処理に最適化されたシリアライズ ストリームが送信されます。
このフォーマットは "Flight "プロトコルとして知られ、生のHTTPボディでは次のようになる:
平文
0:["$@1",["$@2",null]]1:I{"id":"./src/actions/user.js", "chunks":["client-chunk-123"], "name": "updateUser", "async":true} 2:{"name": "John Doe", "email": "[email protected]"}.
信頼の罠
この脆弱性は、サーバ側のデシリアライザがあまりにも熱心に動作するために存在します。影響を受けるバージョンのNext.js(15.1.9以前の15.xおよび16.0.7以前の16.x)では、フレームワークがこのペイロードで定義されたコンポーネントツリーを再構築しようとします。 以前 リクエストしたユーザーが、特定のモジュールをインスタンス化する権限を持っているかどうかを厳密に検証する。
Next.jsでは、クライアントからサーバー側モジュールへの参照を渡すことができます。その意図は、開発者が定義した特定のアクションをサーバーが実行できるようにすることです。しかし、攻撃者がこれらの参照を操作できるという欠陥があります。意図した ./src/actions/user.js細工されたペイロードは、Node.jsの内部ビルトインやグローバル・スコープで利用可能なプロトタイプ汚染ガジェットを参照することができます。
サーバーがこの悪意のあるストリームをデシリアライズする際、単にデータを読み込むだけでなく、次のような処理を行う。 コードを実行する を使ってオブジェクトの状態を復元します。ステートの復元が関数呼び出し(例えばゲッターやコンストラクタ)を含む場合、攻撃者は即座にコードを実行します。多くの場合、認証ミドルウェア(NextAuth.js など)がリクエストヘッダを完全に処理する前にです。

攻撃者のキルチェーン偵察から砲撃まで
Next.jsアプリケーションの防御を任されたセキュリティエンジニアにとって、攻撃者のワークフローを理解することは極めて重要です。CVE-2025-66478 をエクスプロイトするには、スクリプトを実行するほど単純ではありません。
フェーズ1:パッシブ偵察とフィンガープリンティング
攻撃者はまず、ターゲットが脆弱なバージョンのNext.jsを実行していることを確認します。これはHTTPヘッダーを検査することで簡単にできます(X-Powered-By:Next.jsの構造を分析する。 _next/static/ ディレクトリにある。
第2段階:「アクションID」の収穫
これは手動攻撃者にとって最も技術的に難しい部分です。Next.jsは、暗号ハッシュ(例、 a9fa42b4...)を使ってバンドルサイズを最小にする。正しいハッシュがないと、サーバはリクエストを無視します。
攻撃者は、クライアント側のJavaScriptバンドル(Webpackチャンク)を解析することで、これらのハッシュの抽出をスクリプト化します。彼らは 登録サーバー参照 を呼び出す:
ジャバスクリプト
// 最小化されたクライアントのコードスニペット ...registerServerReference(a, "a9fa42b4c7d1",null)...
これらのIDをスクレイピングすることで、攻撃者はサーバーのロジックへの有効なエントリーポイントのマップを構築する。
フェーズ3:ペイロードの構築(「React2Shell」テクニック)
有効なエントリーポイントが見つかると、攻撃者は「React2Shell」ペイロードを構築する。彼らは ポスト リクエストに コンテンツタイプ の テキスト/Xコンポーネント (バージョンにもよるが)。
ボディは、デシリアライズガジェットをトリガーするために設計された再帰オブジェクト構造である。
- ターゲット
child_process.execまたはfs.writeFileSync. - メカニズム ペイロードは、これらのシステム・ライブラリを指すモジュール参照を定義する。
- トリガー: 解析が終わると、サーバーはモジュールの "解決 "を試みる。
フェーズ4:実行と流出
サーバーがストリームを解析する。悪意のあるオブジェクトがインスタンス化される。コマンド ホワミ が実行される。これは帯域外で起こる(HTTPレスポンスがクラッシュしたりエラーを返すかもしれない)ので、精通した攻撃者はOOB(Out-of-Band)テクニックを使い、サーバーに制御されたドメイン(例. pingアタッカー.com)でRCEを確認する。
レガシー・セキュリティ・ツールはなぜ盲目なのか
CVE-2025-66478の後、多くの組織が従来のDAST(ダイナミック・アプリケーション・セキュリティ・テスト)ツールで境界線をスキャンし、問題なしと判断した。 彼らは間違っていた。
レガシー・スキャナー(OWASP ZAP、Burp Suite Proのデフォルト・スキャン、Nessusなど)は、根本的な理由からここで失敗する:
- プロトコルの無知: 標準的なスキャナは、Flightプロトコル本体を不透明なテキストとして扱う。彼らはSQL引用符(
OR 1=1)またはXSSタグを使用します。Next.jsはこれらを単に不正なバイナリストリームとして拒否します。スキャナーは500エラーを見て "Safe "と判断しますが、脆弱性はそのままです。 - 文脈の盲目: レガシースキャナーは、Action IDを見つけるためにWebpackチャンクをスクレイピングする方法を知りません。12文字の英数字のハッシュを「推測」することはできない。IDがなければドアはロックされ、スキャナーは脆弱なコードパスに到達することすらできない。
- WAF回避: ペイロード構造は正規のReactコンポーネントデータを模倣しているため、シグネチャベースのWAFは複雑なユーザーフォームの送信とシリアライズされたRCEエクスプロイトを区別するのに苦労する。
ウェブ2.0ツールでGenAI時代の問題を解決することはできないのだ。

AIの優位性:ペンリジェントが論理パズルを解く方法
ここで、セキュリティのパラダイムが「スキャニング」から「エージェント型ペネトレーションテスト」へと移行する。で ペンリジェント私たちのプラットフォームは、人間のハッカーのように思考しながらも、マシンスピードで動作するように設計されています。
PenligentがNext.jsアプリケーションを分析するときは、専用の RSCエージェント.一般的なスキャナーとの違いは以下の通り:
1.インテリジェント・アセット・パーシング(ソースマップ解析)
盲目的なファジングの代わりに、Penligentのエージェントはクライアントサイドのビルド成果物をダウンロードして解析します。AIは最小化されたJavaScriptのAST(Abstract Syntax Tree)を解析し、次のような問題を特定します。 server$reference マーカーを使用します。インターネットに公開されているすべてのサーバー側関数のマップを効果的に再構築し、どんな正規表現スクリプトもかなわないような包括的な攻撃対象マップを作成する。
2.コンテキストを考慮したペイロード生成
PenligentはReact Flightプロトコルの文法を理解している。ランダムなゴミは送信しません。有効な構造の奥深くに悪意のあるペイロードを含む、構文的に完璧なFlightリクエストを構築します。
シナリオ例Penligentは "Update Profile "アクションを特定します。有効なユーザ ID とメールアドレスフィールドはそのままに、ネストされた "preferences" オブジェクトにプロトタイプの汚染ガジェットを注入する。サーバはその構造を有効なものとして受け入れ、デシリアライズをトリガし、Penligent はその結果の異常を捕捉する。
3.論理検証 vs. 衝突検知
人間のペンテスターは、500エラーが常に脆弱性であるとは限らず、200 OKが常に安全であるとは限らないことを知っている。Penligentは 行動 レスポンスを返します。時間遅延コマンドを注入した後、リクエストの待ち時間が500ms長くなると、HTTPレスポンスボディが空であっても、PenligentはRCEが成功したと推測する。
この能力は自動論理推論-これがPenligentと過去10年間の騒々しいスキャナーとの違いです。Penligentは、SaaSのスケーラビリティを備えながら、手動監査の深さを提供します。
修復と強化徹底的な防御
Penligentのようなツールを使えば脆弱性を見つけることはできるが、それを修正するには多層的なアプローチが必要だ。
早急な対策パッチ
主な修正は、Next.jsを直ちにアップグレードすることです。
- 固定バージョン:
v15.1.9+,v16.0.7+. - メカニズム これらのバージョンでは、シリアライズ可能な型に対する厳格な許可リストを導入し、水和フェーズでモジュール参照をサニタイズして、任意のシステム・モジュールのインスタンス化を防いでいる。
セカンダリー・ディフェンスランタイム・ハードニング
フレームワークパッチだけに頼らないこと。次の0-dayはすぐそこにあると思ってください。
- 最小の特権: Next.jsを実行しているNode.jsプロセスのパーミッションが制限されていることを確認してください。Node.jsプロセスはroot権限を持ってはいけませんし、(特定の一時ディレクトリを除いて)ファイルシステムに書き込むこともできません。
- ネットワーク・セグメンテーション: アウトバウンド接続を制限する。Next.jsサーバーがPWNEDになった場合、外部IPへのリバースシェル接続を開始できないようにします。
- 本番環境でソース・マップを無効にする: 不明瞭さによるセキュリティは戦略ではありませんが、公開ソースマップを無効にすることで、攻撃者(および自動化されたボット)がサーバーアクションIDをマッピングすることが大幅に難しくなります。
高度な設定
すぐにアップグレードできない場合は、次の手順でサーバー アクションを一時的に無効にできます。 next.config.jsしかし、これはアプリケーションの機能を壊す可能性が高い:
ジャバスクリプト
module.exports = { experimental: { serverActions: false, // 緊急キルスイッチ }, }.
結論AIとセキュリティの未来
CVE-2025-66478は、JavaScriptセキュリティの分水嶺である。これは、サーバーの複雑さを抽象化するにつれて、脆弱性が隠れることができる新たな不透明な層を導入することを示している。
リアクト・フライトのようなプロトコルの複雑さは、手作業によるコード・レビューだけで管理できる認識負荷を超えており、レガシーな正規表現ベースのスキャナーの能力を確実に超えている。アプリケーション・セキュリティの未来は エージェントAI-アーキテクチャを理解し、コードを読み、複雑なテスト戦略を自律的に策定できるシステム。
こんなツール 寡黙 は単にバグを特定するだけでなく、アプリケーションのロジックの完全性を検証します。たった一つのデシリアライゼーションの欠陥が、完全な侵害につながる可能性がある時代において、24時間365日体制で貴社の防御を探るAIパートナーを持つことは、もはや贅沢なことではなく、必要不可欠なことなのです。
次のステップ
侵害を待つ必要はない。今すぐNext.jsのバージョンをチェックしてください。重要なインフラストラクチャを管理している場合は、CVE-2025-66478やその他のロジックベースの脆弱性にさらされていることを確認するために、自動化されたエージェントによる侵入テストの導入を検討してください。

