React2Shell(CVE-2025-55182)の実際の被害事例 - クリプトマイナー感染とその対策

React2Shell(CVE-2025-55182)の実際の被害事例 - クリプトマイナー感染とその対策

作成日:
更新日:

はじめに

以前、React Server Components に CVSS 10.0 の RCE 脆弱性「React2Shell」CVE-2025-55182 という記事を書きました。

その記事では「今すぐ対応が必要」と警告しましたが、正直なところ、実際に被害に遭うことはないだろうと思っていた部分もありました。

しかし、先日、私がメンテナンスを担当している別のWebサービスで、この脆弱性を悪用したと思われる攻撃を受け、クリプトマイナー(暗号通貨マイニングマルウェア)に感染していることを発見しました。

この記事では、実際に発生した事例と、行った対策について共有します。同様の被害を防ぐ参考にしていただければ幸いです。

発見の経緯

「nodeが見つからない」

きっかけは非常に単純でした。サーバーにSSH接続し、いつものようにコマンドを実行しようとしたところ、突然以下のエラーが表示されました。

Shell
$ node --version
zsh: command not found: node

Node.jsが見つからない?昨日まで普通に動いていたのに?

最初はPATHの設定がおかしくなったのかと思い、設定ファイルを確認しましたが、特に問題はありませんでした。

不審なプロセスの発見

PATHを手動で設定してnodeを動かそうとしましたが、なぜかインストールコマンドが途中で強制終了されます。

不思議に思い、システムの状態を確認したところ、衝撃的な光景が目に飛び込んできました。

Shell
$ ps aux --sort=-%cpu | head -10
USER       PID  %CPU %MEM    VSZ   RSS TTY   STAT START   TIME COMMAND
ubuntu    1234  99.0  4.2 2456789 123456 ?   Sl   Jan20  1234:56 /tmp/.X11-unix/kdevtmpfsi
ubuntu    2345  98.5  3.8 1987654  98765 ?   Sl   Jan20   987:65 /var/tmp/pro.js

CPU使用率が99%のプロセスが複数動いている。

しかも、実行パスが /tmp/.X11-unix//var/tmp/ という、明らかに怪しい場所です。

マルウェアの正体

調査を進めると、以下のことが判明しました:

  1. kdevtmpfsi - 有名なクリプトマイナーマルウェア
  2. pro.js - Node.jsで動作するマイニングスクリプト
  3. 複数の隠しファイル - /tmp//var/tmp/ に配置された悪意のあるスクリプト

これらはすべて、サーバーのCPUリソースを使って暗号通貨をマイニングしていました。

Shell
$ ls -la /tmp/
-rwxr-xr-x 1 ubuntu ubuntu 2834567 Jan 20 12:34 .X11-unix/kdevtmpfsi
-rw-r--r-- 1 ubuntu ubuntu   12345 Jan 20 12:34 .fonts/.cache
-rwxr-xr-x 1 ubuntu ubuntu    5678 Jan 20 12:34 .ICE-unix/runner.sh
 
$ ls -la /var/tmp/
-rw-r--r-- 1 ubuntu ubuntu   45678 Jan 20 12:34 pro.js
-rw-r--r-- 1 ubuntu ubuntu    1234 Jan 20 12:34 config.json

感染経路の特定

Next.jsのバージョンを確認

サーバーで動作していたNext.jsのバージョンを確認しました。

Shell
$ grep '"next"' package.json
"next": "^16.0.0"

16.0.0 - これはCVE-2025-55182(React2Shell)の影響を受けるバージョンです(16.0.7未満が対象)。

影響を受けるバージョン:

  • Next.js 14.3.0-canary.77以降
  • Next.js 15.x(15.5.7未満)
  • Next.js 16.x(16.0.7未満)

攻撃の流れ(推測)

  1. 攻撃者がReact Server Componentsの脆弱性を悪用
  2. 任意のコード実行権限を取得
  3. クリプトマイナーをダウンロード・実行
  4. 永続化のためのスクリプトを配置

Server Actionsを使用していたエンドポイントがあり、そこが攻撃の入り口になったと思われます。

行った対策

1. マルウェアの駆除

まず、動作中のマルウェアプロセスを停止し、関連ファイルを削除しました。

Shell
# 不審なプロセスを特定して終了
ps aux | grep -E "(kdevtmpfsi|pro\.js|miner)" | grep -v grep | awk '{print $2}' | xargs kill -9
 
# 不審なファイルの削除
rm -rf /tmp/.X11-unix/kdevtmpfsi
rm -rf /tmp/.fonts
rm -rf /tmp/.ICE-unix
rm -rf /var/tmp/pro.js
rm -rf /var/tmp/config.json
 
# cronジョブの確認と削除(永続化に使われることが多い)
crontab -l
crontab -r  # 不審なエントリがあれば削除

2. Node.js環境の復旧

マルウェアによってNode.jsの環境が破壊されていたため、再インストールを行いました。

Shell
# nodebrewで安定版をインストール
nodebrew install v22.12.0
nodebrew use v22.12.0
 
# PATHの設定
export PATH="$HOME/.nodebrew/node/v22.12.0/bin:$PATH"

3. Next.jsのアップデート

最も重要な対策として、Next.jsを修正済みバージョンにアップデートしました。

Shell
# 脆弱性が修正されたバージョンにアップデート
npm install next@16.1.4
 
# 依存関係も更新
npm install react@19.2.1 react-dom@19.2.1
 
# 念のためnode_modulesを再生成
rm -rf node_modules package-lock.json
npm install
 
# ビルドと再起動
npm run build
pm2 restart all

4. SSHキーの更新

攻撃者がサーバーにアクセスした可能性があるため、SSHキーを更新しました。

Shell
# 既存の公開鍵を確認
cat ~/.ssh/authorized_keys
 
# 新しいキーペアを生成(ローカルマシンで)
ssh-keygen -t ed25519 -C "new-key-2026"
 
# 古いキーを削除し、新しいキーのみを設定
echo "ssh-ed25519 AAAA... new-key-2026" > ~/.ssh/authorized_keys

5. パスワードの変更

念のため、サーバー関連のすべてのパスワードを変更しました。

  • サーバーユーザーのパスワード
  • データベースのパスワード
  • 各種APIキー

6. ファイアウォールの強化

不要なポートを閉じ、アクセス制限を強化しました。

Shell
# UFWでファイアウォールを設定
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

7. 監視の導入

今後の再発を早期に検知するため、監視を導入しました。

Shell
# CPU使用率の監視スクリプト(例)
#!/bin/bash
CPU_THRESHOLD=80
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'.' -f1)
 
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
    echo "警告: CPU使用率が${CPU_USAGE}%を超えています" | mail -s "CPU Alert" admin@example.com
fi

8. WAF(Web Application Firewall)の導入検討

今後の対策として、CloudflareなどのWAFサービスの導入を検討しています。

WAFを導入することで:

  • 既知の攻撃パターンを自動ブロック
  • レートリミットによる不正アクセス防止
  • セキュリティアップデートが遅れても一定の保護が可能

今回の教訓

1. 「まさか自分が」は通用しない

「有名なサービスじゃないから狙われない」は完全に間違いでした。

攻撃者はボットを使って脆弱なサーバーを自動的にスキャンしています。規模の大小は関係ありません。

2. セキュリティアップデートは最優先

「動いているから触りたくない」という気持ちはわかります。しかし、CVSS 10.0の脆弱性は、文字通り「今すぐ」対応が必要です。

今回の場合、アップデートを1週間先延ばしにしたことで被害に遭いました。

3. 異常に気づける仕組みが重要

今回は「nodeが使えない」という偶然のきっかけで発見できましたが、もし気づかなければ、サーバーリソースを延々と搾取され続けていたでしょう。

CPU使用率やネットワークトラフィックの監視は必須です。

4. 感染したら「駆除して終わり」ではない

マルウェアを削除しただけでは不十分です。

  • 攻撃者がバックドアを仕掛けている可能性
  • 認証情報が盗まれている可能性
  • 他のシステムに横展開している可能性

理想的にはサーバーを再構築すべきですが、最低でもSSHキーの更新とパスワード変更は必須です。

まとめ

CVE-2025-55182(React2Shell)による実際の被害事例を報告しました。

今すぐ確認してください:

  1. Next.jsのバージョンを確認
  2. 影響を受けるバージョン(14.3.0-canary.77以降〜修正版未満)なら即アップデート
  3. 不審なプロセスがないか確認(ps aux --sort=-%cpu
  4. /tmp//var/tmp/ に不審なファイルがないか確認

「自分は大丈夫」と思わないでください。私もそう思っていました。

セキュリティアップデートは、今日中に。


参考リンク