1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【React2Shell】CVE-2025-55182 — あなたのNext.jsは今も狙われている

1
Posted at

TL;DR

  • React 19系 / Next.js App Router を使っているなら、認証なしでサーバーを乗っ取られる脆弱性(CVE-2025-55182)が存在する
  • 2025年12月の公開から3ヶ月以上経った今も、毎日800件以上の悪意あるIPがスキャンを継続中(GreyNoise調べ・2026年3月時点)
  • まずバージョン確認 → パッチ適用、そして侵害確認の順で対応を。5分で確認できる

この脆弱性は何が起きるのか

React2Shell(CVE-2025-55182) は、2025年12月3日に公開されたReact Server Components(RSC)の脆弱性です。

攻撃者は認証なしで、特定のHTTPリクエスト1本を送るだけでサーバー上の任意コードを実行できます。パスワードもセッションも不要。フォームに細工したデータを送り込むだけで、あなたのサーバーを「乗っ取れる」状態になります。

CVSSスコアは10.0(最大値)。これは「理論上最も危険な脆弱性」に与えられるスコアです。

技術的な背景(エンジニア向け)
Reactの内部通信プロトコル「Flight Protocol」が、/__nextjs_server_actionsなどのエンドポイントでHTTPリクエストのボディを無検証でデシリアライズしてしまうことが根本原因です。攻撃者はここに細工したシリアライズオブジェクトを送り込むことで、サーバー側でNode.jsのchild_process等を実行させられます。ミドルウェアや認証レイヤーより前の段階で処理されるため、認証・認可の仕組みが全て無効化されます。

影響を受けるパッケージとバージョン

パッケージ 脆弱なバージョン 安全なバージョン
react-server-dom-webpack 19.0.0, 19.1.0, 19.1.1, 19.2.0 19.0.1以降
react-server-dom-turbopack 同上 19.1.2以降
react-server-dom-parcel 同上 19.2.1以降

Next.js App Router はこれらのパッケージを内部にバンドルしているため、間接的に影響を受けます。Next.js向けには別途 CVE-2025-66478 という番号も発行されています(根本原因は同一で、NVDでは重複として整理済み)。

Next.js 14 canaryユーザーも対象です
Next.js 14系は通常の安定版であれば影響を受けませんが、14.3.0-canary.77以降のcanaryビルドを使用している場合は脆弱です。canaryを使っている場合は14系の最新安定版へのダウングレード、または15系以降の修正版への移行が必要です。


どれくらい危険なのか — 数字で見る脅威の実態

スコアだけでは実感が湧かないと思うので、実際に観測されているデータを示します。

GreyNoise(インターネット上のスキャン検知サービス)の観測値

  • CVE公開からわずか8時間後にスキャン活動を検知・タグ登録
  • 2026年3月22日時点(公開から約109日後)でも、過去2日間に861のIPアドレスが悪用を試みるスキャンを実施
  • 1時間あたり15〜35のIPが、休むことなく継続してスキャン中

"exploitation is already widespread. 我々のカナリアで数百件の試行を確認している"
— VulnCheck(セキュリティ企業)公式アカウント

ShadowServer(インターネット上の脆弱ホストを観測する非営利組織)の調査

  • 公開1週間後(2025年12月8日):脆弱なIPアドレス165,000台以上、ドメイン644,000件以上が世界中に存在
  • 公開1ヶ月後(2025年12月31日):約90,300インスタンスがまだ未パッチ(うち米国68,400台)

攻撃者は誰か

Googleの脅威インテリジェンスグループ(GTIG)とAWSのセキュリティチームは、以下を確認しています。

  • 中国国家系のグループ(Earth Lamia、Jackpot Pandaなど)が公開当日から悪用を開始
  • 機会主義的な犯罪者(金銭目的)が自動スキャンツールで無差別に標的を探している

実際に使われたマルウェア

攻撃に成功した後、以下のようなものがインストールされた事例が確認されています。

  • XMRig(暗号通貨マイナー) — サーバーのCPUを無断使用して仮想通貨を採掘する
  • Sliver / Cobalt Strike — 攻撃者がサーバーを遠隔操作するためのバックドア
  • ShadowPAD — 国家系グループが常用するスパイツール
  • Mirai系ボットネット — DDoS攻撃の踏み台として使われる

ステップ1:自分の環境が影響を受けるか確認する(5分)

チェック方法

プロジェクトのルートディレクトリで以下を実行してください。

# インストール済みのReact関連パッケージのバージョン確認
npm list react react-server-dom-webpack react-server-dom-turbopack 2>/dev/null

# または package.json を直接確認
cat package.json | grep -E '"react|next"'

判定

react: 19.0.0 〜 19.2.0 が表示された場合         → 要対応
next:  15.x または 16.x(App Router使用)         → 要対応
next:  14.3.0-canary.77 以降のcanaryビルド        → 要対応

react: 18.x 以下                                  → この脆弱性の影響なし
next:  14.x 安定版(stable)                      → 影響なし
next:  Pages Router のみ使用                       → 影響なし

App Routerを使っているか不明な場合:

# app/ ディレクトリが存在すれば App Router を使用している
ls -la | grep "^d.*app$"
# または
find . -name "page.tsx" -path "*/app/*" | head -5

ステップ2:パッチを当てる

【最速】Next.jsプロジェクトならワンコマンドで完結

Next.jsを使っている場合、Vercel公式が提供するワンコマンドツールが最も確実です。

# プロジェクトのルートディレクトリで実行するだけ
npx fix-react2shell-next

このコマンドが Next.js と依存パッケージを自動的に安全なバージョンへ更新します。実行後はアプリケーションシークレット(JWTシークレット、APIキー等)のローテーションも推奨されています(侵害を受けていた場合に備えて)。


手動でアップデートする場合

Reactのアップデート

# React 19系の最新版へアップデート
npm install react@latest react-dom@latest

# react-server-dom系も明示的に更新
npm install react-server-dom-webpack@latest 2>/dev/null || true
npm install react-server-dom-turbopack@latest 2>/dev/null || true

Next.jsのアップデート

# Next.jsを最新版へ
npm install next@latest

# アップデート後に確認
npx next --version
npm list react

アップデート後の確認

# 脆弱なバージョンが残っていないか確認
npm list | grep -E "react-server-dom"
# 全て 19.0.1以降 / 19.1.2以降 / 19.2.1以降 になっていればOK

すぐにアップデートできない場合の暫定対策

本番環境への影響が懸念されてすぐに更新できない場合は、WAF(Webアプリケーションファイアウォール) でServer Actionsのエンドポイントへの不審なリクエストをブロックすることを検討してください。Cloudflare WAFやAWS WAFにはすでに対応ルールが公開されています。


ステップ3:すでに侵害されていないか確認する

パッチを当てる前に、すでに被害を受けていないか確認することも重要です。

不審なプロセスの確認

# 暗号通貨マイナー(xmrig)が動いていないか
ps aux | grep -i xmrig

# CPU使用率が異常に高いプロセスを確認
top -bn1 | head -20

# 見覚えのないNode.jsプロセスを確認
ps aux | grep node

不審なネットワーク接続の確認

# 外部への不審な接続を確認
ss -tunap | grep ESTABLISHED

# 見覚えのないリスニングポートを確認
ss -tlnp

不審なcronジョブ・定期実行の確認

攻撃者は持続的なアクセスを確保するため、cronやsystemdに悪意あるタスクを仕込むことがあります。

# rootのcrontab確認
crontab -l 2>/dev/null
sudo crontab -l 2>/dev/null

# /etc/cron系の確認
ls -la /etc/cron* /var/spool/cron/

# systemdの不審なサービス確認
systemctl list-units --type=service --state=running

Webサーバーログの確認

# Server Actionsへの不審なPOSTリクエストを探す
# (ログのパスは環境によって異なります)
grep -E "POST.*__nextjs_server_actions|POST.*__next" /var/log/nginx/access.log 2>/dev/null | grep -v "200" | tail -50

# 大量のPOSTリクエストが来ていないか確認
grep "POST" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

不審なファイルの確認

# 最近作成・変更されたシステムファイルを確認
find /tmp /var/tmp /dev/shm -type f -newer /etc/passwd 2>/dev/null

# 隠しディレクトリの確認
find / -name ".*" -type d -not -path "*/\.*/*" 2>/dev/null | grep -v "^\./\." | head -20

まとめ

CVE-2025-55182(React2Shell)は、スコアの高さだけでなく、ツールが出揃っていて誰でも攻撃できる状態になっている点が特に危険です。公開から3ヶ月経っても攻撃が続いているということは、まだパッチを当てていない環境が多数残っていることを意味します。

今日確認してほしいこと:

  1. npm list react でバージョンを確認する
  2. 19.x系を使っていたらアップデートする
  3. 念のため ps aux | grep xmrig で不審なプロセスがないか確認する

React 18以下を使っている場合、またはNext.js Pages Routerのみの場合はこの脆弱性の影響を受けません。


参考リンク


この記事は、複数の脅威インテリジェンスソース(GreyNoise、ShadowServer、Google GTIG、Microsoft Threat Intelligence、AWS Security、各種X投稿)をもとに作成しました。データは2026年3月22日時点のものです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?