ペンリジェント・ヘッダー

ReactサーバーコンポーネントのCVE-2025-55184とマイクロタスク飢餓攻撃

Reactチームによる2025年12月のセキュリティ勧告は、ウェブ・アプリケーション・セキュリティのパラダイム・シフトを意味する。業界がReact Server Components(RSC)を介してサーバーサイド・レンダリング(SSR)を急速に採用するにつれ、攻撃対象はクライアントのDOMからサーバーのシリアライズ境界に移行している。 CVE-2025-55184 は些細なリソース枯渇のバグではなく、高度なものである。 アルゴリズムの複雑さ サービス拒否 Node.jsのイベントループの基本的なアーキテクチャをターゲットにしています。イベント・ループ内のPromisesの再帰的デシリアライズを利用することで、Node.jsのイベント・ループの基本的なアーキテクチャをターゲットにすることができます。 フライト・プロトコル認証されていない攻撃者は、次のような攻撃を仕掛けることができる。 マイクロタスクキュースターベーションTCPポートを開いたままサーバー・プロセスを昏睡状態にする。この決定版ガイドは、ワイヤー・レベルで脆弱性を解剖し、「ウロボロス」再帰メカニズムを探求し、そしてどのようにTCPポートを開放するのかを実証する。 寡黙 AIによるディファレンシャル・ファジングを活用することで、生産の可用性を妨げることなく、この欠陥を検証することができる。

CVE-2025-55184

墜落のアーキテクチャRSC、フライト、イベントループ

CVE-2025-55184の重大性を十分に理解するためには、まず、Next.js App RouterとReact 19を動かす独自の通信レイヤーを分解する必要がある。 フライト・プロトコル.

フライト・プロトコル・ワイヤーのフォーマット

一般的に静的なJSONを返すRESTやGraphQLとは異なり、RSCはコンポーネント・ツリーをインクリメンタルに解決するように設計されたハイブリッド行ベースのストリーミング形式を使用する。

典型的なフライト・レスポンスの流れは次のようなものだ:

HTTP

1:I{"id":134,"chunks":["app/page.js"],"name":"default"}2:{"title":"Welcome","content":"$@1"}3:{"$":"$@2"}

  • 1行目:モジュール(クライアントコンポーネント)をインポートします。
  • 2行目:チャンク1を参照するJSONオブジェクトを定義します。
  • 3行目:チャンク2への参照を定義する。

致命的な特徴非同期シリアライズ

Reactでは、開発者がサーバーからクライアントにPromiseを渡すことができます。シリアライザーは保留中のPromiseに遭遇すると、プレースホルダーを発行します。デシリアライザー(受信側、階層型アーキテクチャではサーバーになることもある)は、これらのPromiseが解決するのを待つようにプログラムされている。

この要件を満たすには 再帰的解決戦略:この再帰に脆弱性がある。

Node.jsの内部:マイクロタスクキューの飢餓

なぜこの悪用は、標準的な悪用と比較して、これほど破壊的なのか? while(true) ループ?その答えは、V8エンジンのタスクスケジューリングにある。

  1. マクロタスク:タイマーセットタイムアウト)、I/Oコールバック、 セットイミディエイト.
  2. マイクロタスク:プロミス・コールバック (そして, キャッチ), process.nextTick.

飢餓のメカニック

Node.js のイベント・ループは、厳格な優先順位ルールに基づいて動作します:イベントループが次のフェーズに進む前に、マイクロタスクキューが完全に排出されなければなりません。

CVE-2025-55184のエクスプロイトでは、攻撃者はペイロードを送信し、Promiseが自分自身(または自分自身につながるチェーン)に解決します。

  • デシリアライザは .then() で解決する。
  • コールバックは実行され、再帰を確認し、次のようにスケジュールする。 もう一つ .then().
  • これは極めて重要なことである。 同期的に キュー処理に関して。キューの長さがゼロになることはない。
  • インパクト:ネットワークI/Oコールバック(新しいリクエストの処理)、ヘルスチェックプローブ、OSシグナルが永久にブロックされる。プロセスは生きていて(PIDは存在する)、ポートは開いている(SYN-ACKはOSレベルで動作する)が、アプリケーションは脳死状態である。

エクスプロイトのリバースエンジニアリング

ウロボロス」ペイロード

脆弱性が存在するのは react-server-dom-webpack (および Parcel/Turbopack 用のその亜種)。パッチが適用されていない プロセス値 リファレンス・タイプには、深度制限やサイクル検出機能がなかった。

攻撃者は、これを武器にして 有向巡回グラフ(DCG) フライトペイロード内。

概念的なエクスプロイト・コード(プロトコル・レベル)

実際のバイナリ・エンコーディングは複雑だが、攻撃ベクターの論理構造はエレガントでシンプルだ:

ジャバスクリプト

悪意のあるフライト構造のJSON表現 // ターゲット:Next.jsアプリルーターのエンドポイント(POST /)。

{ "id":「root", "chunks":[], "value":{ // Flight構文を使用して、手動でPromiseオブジェクトを定義する "$":"$Promise", "status":"fulfilled", "value":{この解決されたプロミスの値は... ITSELFである。"$":"$@root" } である。}}`

サーバーがこれを解析すると

  1. 成就した約束を見ている。
  2. それは価値を解き放つ。
  3. ルート・オブジェクト(プロミス)への参照を見る。
  4. ルート・オブジェクトを再びアンラップするために、マイクロタスクをスケジュールする。
  5. 後藤 1.

このループは、SQLインジェクションのシグネチャや大きなリクエスト・ボディを探す従来のWAFをバイパスして、完全にメモリ内で行われる。ペイロードは1KBより小さいことが多い。

不完全な修正」サーガ(CVE-2025-67779)

この脆弱性に対する最初のパッチが、数日のうちにバイパスされたことは極めて重要である。最初の修正では、再帰の深さを追跡しようとしたが、特定の入れ子構造のバリエーション(例えば、サイクルを 地図 または セット).これにより CVE-2025-67779.したがって、単に「更新」するだけでは不十分である。 決定的 パッチを適用したバージョン(React 19.0.3+ / Next.js 15.0.6+)。

サイレント・パートナーCVE-2025-55183 (ソースコードの暴露)

55184は可用性を破壊する、 CVE-2025-55183 は機密性を破壊する。この脆弱性は同時に公表された。

リークのメカニズム

サーバー・アクションは内部関数です。しかし、攻撃者が(それを呼び出すのではなく)値としてIDでサーバー・アクションを要求すると、脆弱なシリアライザーはそれをデータ・オブジェクトとして扱います。その際、コンパイルされた関数本体を文字列としてシリアライズします。

インパクト:

  • ロジック抽出:攻撃者はバックエンドの検証ロジックを読むことができる (if (!user.isAdmin) ...).
  • 秘密のスクレイピング:ハードコードされたAPIキーや内部エンドポイントが明らかになる。
  • シャドーAPIの発見:未使用または非表示のサーバーアクションが可視の攻撃対象になる。

高度な検証:ペンリジェント・アプローチ

大きなリスクを伴う環境において、脆弱性を証明するために「サーバーをクラッシュさせようとする」ことは、プロフェッショナルではなく、危険である。 寡黙 AIを活用した 安全な搾取 これらのCVEをゼロ・ダウンタイムで検証するための戦略である。

戦略1:境界再帰プロービング(安全なDoS)

無限ループの代わりに、Penligent AIエージェントはペイロードを 有限再帰の深さ ($n=5000$)。

  • プローブ:5000回の繰り返しで終了する再帰的なPromiseチェーン。
  • ヒューリスティック分析:
    • 脆弱:サーバはチェーンを処理する。Penligentは 遅延ドリフト (例えば、応答時間=ベースライン+200ms)とヒープ使用量の一過性の急増。
    • パッチド:React 19の新しいセキュリティ・メカニズムでは、"Cyclic Reference "エラーが即座にスローされる。レスポンスはほぼ瞬時です(500 Internal Server Error)。
  • 結論:待ち時間と深さに相関がある場合($T ︓ N$)、プロセスをハングアップさせずに脆弱性を確認する。

戦略2:ソースリーク(CVE-2025-55183)に対する差分ファジング

ソースコード公開の脆弱性を検出する:

  1. 指紋押捺:Penligentは、正規のクライアント側バンドルから利用可能なサーバーアクションIDを識別します。
  2. 反射インジェクション:エージェントは、これらのIDをデータプロパティとして "エコー "しようとする修正されたフライトリクエストを送信する。
  3. パターンマッチングAI:応答ストリームが分析される。AIがJavaScript関数のシグネチャを検出した場合(例. 非同期関数 $..., var _0x...をフラグする。 重要情報の漏洩.
ReactサーバーコンポーネントのCVE-2025-55184とマイクロタスク飢餓攻撃

エンジニアの行動計画と改善策

悪用の窓は大きく開いている。自動ボットはすでに、公開されたNext.js 15.0.xインスタンスをスキャンしている。

1.アップグレードマトリックス(厳格実施)

依存関係ツリーが安全なバージョンに解決されるようにしなければならない。セムバー・カレット(^)だけである。 pnpm-lock.yaml または パッケージロック.json.

パッケージ脆弱な範囲安全バージョン(最小)
react-server-dom-webpack< 19.0.319.0.3
Next.js15.0.0 – 15.0.515.0.6+ (v14の場合は14.2.34+)

2.依存関係の解消のオーバーライド

なぜなら react-server-dom-webpack はネストされた依存関係であることが多いので、強制的に package.json 古いバージョンが忍び込むのを防ぐためだ:

JSON

// package.json { "pnpm":{ "overrides":{ "react-server-dom-webpack":"19.0.3", "react-server-dom-turbopack":"19.0.3"}}}

3.継続的バリデーション

セキュリティは1回限りのパッチではない。使用する 寡黙 を継続的に監視します。CVE-2025-67779に見られるような)新しいバイパスが出現すると、PenligentのAIモデルはこれらのバリエーションをテストするために更新され、境界が進化するロジック攻撃に対して侵入不可能であることを保証します。

参考文献と権威リンク:

記事を共有する
関連記事