CVE-2025-55182への対応:React Server Components脆弱性に関する私たちの経験
2025年12月3日、ReactチームはCVE-2025-55182を公開しました。これはReact Server Componentsにおける認証不要のリモートコード実行脆弱性で、CVSSスコアは10.0です。数時間以内に、Amazon、Google、Microsoftの脅威インテリジェンスチームが、国家支援型の攻撃を含む複数のアクターグループによる積極的な悪用を確認しました。この脆弱性はNext.js、React Router、そして基本的にReact Server Componentsを実装するすべてのフレームワークに影響を与えます。
この記事では、本番サーバーの一つに関するBSI(ドイツ連邦情報セキュリティ庁)からの通知に対する当社の対応を記録し、同様の状況に直面しているチーム向けのセキュリティ監査フレームワークを提供します。
CVE-2025-55182の実際の動作
CVE-2025-55182は、RSC“Flight”プロトコルにおける安全でないデシリアライゼーションを悪用します。これはReactがサーバーとクライアント間でコンポーネントツリーをシリアライズするために使用するメカニズムです。サーバーが特別に細工されたPOSTリクエストを受信すると、ペイロード構造の検証が正しく行われず、攻撃者が制御するデータがサーバー側の実行ロジックに影響を与えることが可能になります。その結果、Node.jsプロセスの権限で任意のコード実行が可能となります。
特に注目すべきは攻撃対象領域です。デフォルト設定のままで脆弱性が存在します。create-next-appで作成し、本番用にビルドされた標準的なNext.jsアプリケーションは、開発者がコードを変更しなくても悪用される可能性があります。Wiz Researchによるテストでは、ほぼ100%の信頼性が実証されており、エクスプロイトに必要なのは認証不要の単一のHTTPリクエストのみです。
問題は、React Server Componentsが現代のWebアプリケーションにとって基盤的なインフラストラクチャとなっていることです。Wizのデータによると、クラウド環境の39%が脆弱なバージョンを実行するインスタンスを含んでいます。インターネットに公開されたアプリケーションにとって、このエクスポージャーウィンドウは重大なリスクを意味します。
私たちに起きたこと
2026年1月14日、当社はHetznerからBSIのCERT-Bundチームの警告を転送する自動セキュリティ通知を受信しました。この通知は、当社の本番サーバーの一つ、Hetzner Cloudインフラストラクチャ上で稼働するmeinjagdschein.tva.sgが、CVE-2025-55182に対して脆弱なWebアプリケーションをホスティングしていることを特定しました。BSIの検出方法論はSL Cyberによって文書化されており、アプリケーション自体へのアクセスを必要とせずに外部スキャンによって脆弱性を特定するものです。
通知は、2025年12月3日の最初の公開から約6週間後に届きました。この時間軸が重要なのは、積極的な悪用がほぼ即座に開始されたためです。Amazonの脅威インテリジェンスは公開から数時間以内に悪用の試みを文書化しており、暗号通貨マイナー、リバースシェル、永続的アクセスメカニズムを展開するキャンペーンが確認されました。Google Threat Intelligence Groupは、侵害されたシステムにSNOWLIGHTダウンローダー、HISONICバックドア、XMRIGマイナーを展開する個別のキャンペーンを特定しました。
実際には、エクスポージャーウィンドウが脆弱性管理における中核的なリスクを表しています。公開からパッチ展開までの時間が、理論上の脆弱性が実際の侵害になるかどうかを決定します。
パッチ適用
修正自体は簡単です。Next.jsアプリケーションの場合、パッチ適用済みバージョンへのアップグレードで脆弱性は解消されます。Vercelの変更履歴に具体的なバージョンが記載されています:
Next.js 14.xの場合:バージョン14.2.35以降にアップグレードしてください。Next.js 15.xの場合:各マイナーリリースの15.0.5、15.1.9、15.2.6、15.3.6、15.4.8、15.5.7以降にアップグレードしてください。Next.js 16.xの場合:16.0.7以降にアップグレードしてください。
基盤となるReactパッケージには、現在のバージョンに応じて19.0.1、19.1.2、または19.2.1が必要です。React 19.2.2は追加の情報漏洩の問題(CVE-2025-55183)に対処し、19.2.3はサービス拒否の脆弱性(CVE-2025-55184およびCVE-2025-67779)を解決します。
Dockerを使用した本番デプロイの場合、通常はpackage.jsonの更新、コンテナイメージの再ビルド、再デプロイを意味します。このプロセスは、当社のReactアプリケーションデプロイガイドやマルチテナントDockerアーキテクチャの記事で文書化したのと同じコンテナ化デプロイパターンに従います。
しかし実際には、パッチ適用は将来の悪用に対処するものです。長期間のエクスポージャー後のより差し迫った問題は、すでに侵害が発生しているかどうかです。
侵害の確認
CVE-2025-55182の悪用の性質上、成功した攻撃は識別可能な痕跡を残します。Unit 42、Google Threat Intelligence、Amazonセキュリティチームが文書化した悪用後の活動は、一貫したパターンに従います:初期偵察、Base64エンコードされたコマンドによるペイロード配信、cronジョブまたはsystemdサービスによる永続化の確立、横移動または暗号通貨マイニングの展開です。
体系的な監査では、プロセスアクティビティ、ネットワーク接続、永続化メカニズム、ファイルシステムの変更、アプリケーションの整合性を調査する必要があります。
プロセス分析は、予期しないリソース消費(暗号通貨マイナーは通常、持続的な高CPU使用率を引き起こします)および不審なプロセス名の特定に焦点を当てます。React2Shellキャンペーンで確認されたマルウェアには、xmrigのバリエーション、curlまたはwgetを介してシェルスクリプトを実行するプロセス、正規のシステムプロセスに偽装しようとするkswapdやkworkerの亜種のようなカーネル偽装名が含まれます。
ネットワーク分析は、予期しない送信トラフィックのアクティブな接続を調査します。コマンド&コントロールインフラストラクチャは通常、ファイアウォール検出を回避するために一般的なポート(443、8443、8080)で通信しますが、見慣れないIPアドレスへの接続は調査が必要です。Node.jsプロセスから想定されるアプリケーション依存関係以外のアドレスへの確立された接続は、潜在的な侵害を示しています。
永続化メカニズムは、悪用成功の最も信頼性の高い指標です。永続的なアクセスを確立する攻撃者は、通常crontabの変更、systemdサービスの作成、SSH認証鍵の追加、シェルプロファイルスクリプトへのコマンドの注入を行います。エクスポージャーウィンドウ中のこれらのファイルへの変更は、慎重な調査が必要です。
SSH鍵の監査は特に注意が必要です。authorized_keysファイルに不正なSSH鍵を追加することで、初期の脆弱性がパッチされた後でも、攻撃者に信頼性の高い再侵入手段を提供します。現在の認証鍵を既知の正当な鍵と比較することで、侵害を示す可能性のある追加を特定できます。
ファイルシステム分析は、攻撃者がペイロードを頻繁にステージングする一時ディレクトリ(/tmp、/var/tmp、/dev/shm)を調査し、最近変更された実行可能ファイルや設定ファイルを特定します。エクスポージャーウィンドウ(2025年12月3日からパッチ展開まで)が、関連する変更時間枠を定義します。
アプリケーション整合性の検証は、現在のアプリケーションファイルを既知の正常な状態と比較します。バージョン管理下のアプリケーションの場合、git statusとgit diffで変更を特定します。コンテナ化されたデプロイの場合、実行中のコンテナの内容をソースイメージと比較することで、デプロイ後に導入された変更が明らかになります。
ログの確認
Webサーバーのログは悪用の試みを可視化しますが、ログ設定によっては成功した悪用が明らかな痕跡を残さない場合があります。React2Shellエクスプロイトは、RSCエンドポイントへのPOSTリクエストを使用し、リクエストボディに通常とは異なるペイロード特性を持つことがよくあります。
エクスポージャーウィンドウ中のPOSTリクエスト、特にReact Server Componentsに関連するルートへのリクエストについてアクセスログを調査することで、悪用の試みが明らかになる可能性があります。しかし、不審なログエントリがないからといって侵害がないことを確認できるわけではありません。永続的なアクセスを持つ攻撃者は、活動を隠すためにログを削除したり変更したりすることがよくあります。
認証ログ(auth.log、sshdジャーナルエントリ)はログイン試行と成功を記録します。予期しない認証の成功、特に見慣れないIPアドレスからの認証やエクスポージャーウィンドウ中に追加された鍵を使用した認証は、アプリケーション層の悪用ログがなくても潜在的な侵害を示しています。
当社の結果
影響を受けたシステムの体系的な調査の結果、悪用が成功した形跡は見つかりませんでした。予期しないプロセス、不審なネットワーク接続、不正な永続化メカニズム、変更されたSSH鍵、一時ディレクトリへのペイロード展開の証拠、通常のデプロイ活動以外のアプリケーションファイルの変更はいずれも確認されませんでした。
エクスポージャーウィンドウは現実のものでした。脆弱性の公開からパッチ展開まで約6週間です。文書化された活発な悪用キャンペーンを考慮すると、リスクは重大でした。しかし今回のケースでは、その期間中に当社のシステムが標的にされなかったか、または理論的な脆弱性にもかかわらず悪用の試みがコード実行に至らなかったかのいずれかです。
この結果はパッチ適用の遅延を正当化するものではありません。6週間のエクスポージャーウィンドウは、機密性の高い操作を処理する本番インフラストラクチャにとって容認できないリスクを表しています。正しい対応には、脆弱性が判明した際の即座のパッチ適用と、エクスポージャー期間中に侵害が発生したかどうかを評価する体系的な監査の両方が含まれます。
学んだこと
BSIの通知システムは意図した通りに機能しました。外部モニタリングがドイツでホストされたインフラストラクチャに影響する脆弱性を特定し、ホスティングプロバイダーを通じて責任者に警告しました。これはインターネットインフラストラクチャに存在すべき協調的なセキュリティモデルそのものです。
課題は対応の遅延にあります。CVE-2025-55182は12月3日に公開されました。パッチは即座に利用可能でした。積極的な悪用は数時間以内に始まりました。しかし当社の通知は1月14日、6週間後に届きました。このギャップは本番インフラストラクチャ管理の運用上の現実を反映しています。すべての組織がスタック内のすべての依存関係のセキュリティアドバイザリを継続的に監視しているわけではありません。自動脆弱性スキャンは存在しますが、設定とメンテナンスが必要です。複数アプリケーション環境は課題をさらに複雑にします。
ここで重要なのは、将来のエクスポージャーウィンドウを短縮するプロセスを確立することです。ReactおよびNext.jsアプリケーションについては、ReactブログとNext.jsセキュリティアドバイザリを監視することで、重要な脆弱性の直接的な通知が得られます。より広範なインフラストラクチャについては、Dependabot、Snyk、または同様のツールがプロジェクト全体の依存関係の脆弱性監視を自動化します。
以前文書化したtva-fetchシステムを含む当社のインフラストラクチャは、迅速なパッチ適用を容易にするコンテナ化されたデプロイパターンを実装しています。依存関係の更新は、コンテナの再ビルドと再デプロイを意味し、脆弱性が特定された後は通常数分で達成できます。これらのパターンについては、n8nセルフホスティングガイドとTraefikリバースプロキシチュートリアルで詳しく取り上げています。このアーキテクチャアプローチは脆弱性を防ぐものではありませんが、対応における運用上の摩擦を最小限に抑えます。
同様の通知を受け取った場合
CVE-2025-55182に関してBSIまたはホスティングプロバイダーから同様の通知を受け取った場合、対応の優先順位は明確です:即座にパッチを適用し、その後侵害の有無を監査してください。
パッチ適用は将来の悪用を防ぎますが、既存の潜在的な侵害には対処しません。上記の監査フレームワークは、体系的な調査の出発点を提供します。社内にセキュリティの専門知識がない組織の場合、影響を受けるシステムやデータの機密性に応じて、インシデント対応サービスの利用が適切な場合があります。
このプロセス全体を通じて文書化が重要です。変更を加える前に現在のシステム状態を記録してください。ローテーションまたは上書きされる可能性のあるログを保存してください。侵害の指標が現れた場合は、攻撃の範囲を理解するために有用な証拠を破壊する可能性のある修復を行う前に、フォレンジック保全を検討してください。
React2Shellの脆弱性は、Reactエコシステムにとって重要な転換点を表しています。サーバーサイドReactコンポーネントに影響を与える最初の重大な認証不要のRCEです。パッチ適用の要件は簡単ですが、このインシデントは、現代のWebフレームワークがその利便性にもかかわらず、他のサーバーインフラストラクチャと同じセキュリティ上の注意を必要とするサーバーサイドの攻撃対象領域を導入することを再認識させるものです。
まとめ
CVE-2025-55182は、理論上の脆弱性がいかに迅速に実用的なリスクとなるかを示しました。国家支援型のアクターや犯罪グループは、公開から数時間以内にエクスプロイトを統合しました。技術的な深刻度(CVSS 10.0、認証不要、単一のHTTPリクエストによる悪用)は、対応の緊急性を正当化するものでした。
本番環境でReact Server Componentsを運用している組織にとって、即時の対応はすべてのデプロイにおけるパッチ状況の確認です。当社のように長期間のエクスポージャーウィンドウを経験した組織にとっては、上記のフレームワークを使用した体系的な監査が侵害状況について合理的な信頼性を提供しますが、包括的なフォレンジック分析なしに完全な確実性を得ることは困難です。
より広い教訓はこの特定の脆弱性を超えて適用されます。現代のWebアプリケーションにおける依存関係管理は、継続的な注意を必要とする重大な攻撃対象領域を生み出します。自動脆弱性監視、迅速な更新を可能にするコンテナ化デプロイパターン、インシデント対応手順は、セキュリティ通知が届いた後に実施する事後対応ではなく、標準的な運用プラクティスであるべきです。
インフラストラクチャのコンサルテーションやセキュリティ監査の支援が必要なNext.jsまたはReactアプリケーションを管理しているチームのために、tvaはさまざまな規模とセキュリティ要件にわたる本番デプロイの経験に基づく技術アドバイザリーサービスを提供しています。ここで説明したアーキテクチャパターンは、実際の運用コンテキストから学んだ教訓を反映しています。
React Server Componentsのセキュリティやインフラストラクチャ監査の手順についてご質問がありますか? tva.sg/contactにアクセスして、お客様の環境に関するご相談をお寄せください。