SOC Prime Bias: クリティカル

05 12月 2025 16:35

CVE-2025-55182およびCVE-2025-66478: RSC/Next.js RCEの高精度検出

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon フォローする
CVE-2025-55182およびCVE-2025-66478: RSC/Next.js RCEの高精度検出
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

要約

リモートコード実行の欠陥が、React Server Componentsを使用するNext.jsアプリケーションに影響を与えます。この問題は、事前アクセスなしで、特別に細工されたmultipart HTTPリクエストを送信することで引き起こされる可能性があります。複数の公開された概念実証のエクスプロイトが存在するものの、多くは信頼できないか、または不正確です。この記事では、特徴的なサーバーエラーレスポンスに依存する高忠実度の検出技術を紹介します。

調査

研究者たちはReact Server Componentの解析ロジックを調査し、コロン区切りのプロパティ参照が問題のオブジェクトがない場合に500エラーを引き起こすことがあることを発見しました。そしてこの条件を確実にトリガーするmultipartペイロードを構築し、繰り返し可能な応答パターンを確認しました。提案された検出ルールは、特徴的な E{"digest" フラグメントを本文に含むHTTP 500応答をフラグします。

緩和策

緩和策には、コロン表記周りに追加の安全措置を組み込んだバージョンへのNext.jsリリースのアップグレードが含まれます。組織は悪意のあるmultipart構造をブロックするためにWAFルールを展開し、React Server Componentsに触れるすべての着信リクエストが検証およびサニタイズされることを確認する必要があります。

応答

セキュリティチームは、記述されたリクエスト-レスポンス署名に対して公開されたWebアプリケーションをスキャンし、脆弱なNext.jsインスタンスの修正を優先すべきです。エクスプロイトが疑われる場合、影響を受けたサーバーを隔離し、コード実行の証拠のためにログを保存および確認し、関連するパッチを迅速に適用してください。

攻撃の流れ

この部分はまだ更新中です。通知を受け取るためにサインアップしてください

通知する

シミュレーション実行

前提条件: テレメトリ&ベースラインプレフライトチェックが合格していること。

合理性: このセクションは、検出ルールをトリガーするために設計された攻撃者技術(TTP)の正確な実行を詳述しています。コマンドと記述は、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は誤診につながります。

  • 攻撃の物語&コマンド:
    攻撃者は、ターゲットが脆弱なバージョンのNext.jsを実行していることを確認し、正当な資産アップロードフローを模倣する悪意あるmultipartリクエストを作成します。 User-Agent を Assetnote/1.0.0 に設定し、内部Next.jsヘッダー Next-Action: x および X-Nextjs-Request-Id: b5dce965 を注入することで、信頼されていないデータを逆シリアル化するサーバーサイドコンポーネントをトリガーし、実行時例外を引き起こします。サーバーはHTTP 500で応答し、検出ルールが監視しているシリアライズされたダイジェスト(E{"digest)を含みます。

  • リグレッションテストスクリプト:

    #!/usr/bin/env bash
    #
    # Next.js RCE検出ルールのエクスプロイトシミュレーション(T1595.002)
    # Sigmaルールが期待するパケットパターンを生成します。
    #
    TARGET="http://127.0.0.1"
    ENDPOINT="/"
    USER_AGENT="Assetnote/1.0.0"
    BOUNDARY="----WebKitFormBoundary$(date +%s)"
    
    # 検出には内容が関係ない最低限のmultipart本文。
    read -r -d '' PAYLOAD <<EOF
    --$BOUNDARY
    Content-Disposition: form-data; name="file"; filename="exploit.txt"
    Content-Type: text/plain
    
    exploit
    --$BOUNDARY--
    EOF
    
    curl -s -o /dev/null -w "%{http_code}n" -X POST "${TARGET}${ENDPOINT}" 
      -H "User-Agent: ${USER_AGENT}" 
      -H "Next-Action: x" 
      -H "X-Nextjs-Request-Id: b5dce965" 
      -H "Content-Type: multipart/form-data; boundary=${BOUNDARY}" 
      --data-binary "$PAYLOAD"

    ターゲットWebサーバーに到達できるマシンでスクリプトを実行してください。予想されるHTTPステータスは 500 であり、サーバーのエラーログには E{"digest 文字列が含まれます。

  • クリーンアップコマンド:

    # ターゲットに永続的な変更はありません;単にローカルの一時ファイルを削除してください
    rm -f /tmp/exploit_payload.tmp 2>/dev/null || true