CVE-2025-55182およびCVE-2025-66478: RSC/Next.js RCEの高精度検出
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