概要:React Nativeモジュールにおける重大なRCE脆弱性
広く利用されているReact Native開発パッケージに、数百万人の開発者をリモート攻撃に晒す可能性のある深刻なセキュリティ脆弱性が発見されました。JFrogのセキュリティ研究者らは最近、@react-native-community/cli NPMパッケージに影響を与えるCVE-2025-11953という重大なリモートコード実行(RCE)の欠陥を発見しました。このパッケージは週に約200万回ダウンロードされています。
この脆弱性は、最大CVSSスコア9.8を記録しており、認証されていない攻撃者による悪用の容易さとその深刻度を示しています。
脆弱性の詳細
- CVE ID: CVE-2025-11953
- 影響を受ける製品: @react-native-community/cli-server-api
- 影響を受けるバージョン: 4.8.0から20.0.0-alpha.2
- CVSSスコア: 9.8 (Critical)
- 脆弱性の種類: リモートコード実行 (RCE)
この欠陥により、リモートの攻撃者は、認証やユーザー操作を必要とせずに、React Nativeの開発サーバーを実行しているマシン上で任意のオペレーティングシステムコマンドを実行できます。これは、React Nativeモバイルアプリケーションを開発している開発者にとって重大な脅威であり、悪用されるとシステム全体の侵害につながる可能性があります。
この脆弱性は、@react-native-community/cli-server-apiパッケージのバージョン4.8.0から20.0.0-alpha.2に存在し、バージョン20.0.0でパッチが適用されています。
脆弱性のメカニズム
このセキュリティ上の欠陥は、Metro開発サーバーの/open-urlエンドポイントにおけるユーザー入力の安全でない処理に起因します。開発者がnpm startやnpx react-native startなどの一般的なコマンドを実行して開発環境を起動すると、サーバーはサニタイズされていないデータを含むPOSTリクエストを処理します。このデータは、open NPMパッケージの危険なopen()関数に直接渡されます。
この関数は、適切な検証なしにシステムレベルのコマンドを実行するため、攻撃者が悪意のあるコマンドを注入する経路を作り出します。Windowsシステムでは、研究者らは完全なパラメータ制御を伴う任意のコマンド実行を実証しました。
この脆弱性により、攻撃者は悪意のあるリクエストを作成し、基本的なサニタイズの試みを回避してシェルコマンドを実行できます。macOSおよびLinuxシステムでは、異なるコード実行メカニズムのため、悪用経路はやや制限されますが、研究者らはこれらのプラットフォームでも追加の研究により任意のコマンド実行が可能であると考えています。
複合的な問題:ネットワークインターフェースへのバインド
さらに問題を複雑にしているのは、JFrogがReact Nativeのコアコードベースで発見した2つ目の脆弱性です。これにより、開発サーバーはlocalhostのみで動作していると表示されるにもかかわらず、localhostだけでなくすべてのネットワークインターフェースにバインドされます。この設定ミスにより、ローカルのみのセキュリティ問題であったものが、開発エンドポイントがネットワーク攻撃者からアクセス可能になるため、リモートで悪用可能な重大な脆弱性へと変化します。
リスクに晒されている開発者と緩和策
@react-native-community/cliの脆弱なバージョンを使用してReact Nativeプロジェクトを開始し、標準コマンドを通じてMetro開発サーバーを実行している開発者はリスクに晒されています。ただし、Expoなどの異なる開発サーバーを使用するフレームワークを使用している開発者は、通常影響を受けません。
プロジェクトに脆弱なパッケージが含まれているかを確認するには、プロジェクトフォルダでnpm list @react-native-community/cli-server-apiを実行します。このパッケージはグローバルにインストールされている可能性もあり、その場合はnpm list -g @react-native-community/cli-server-apiで確認できます。
推奨される対策:
- 即座にアップデート: 開発者は、すべてのReact Nativeプロジェクトで@react-native-community/cli-server-apiをバージョン20.0.0以降に直ちにアップデートする必要があります。
- 一時的な緩和策: アップグレードが困難な場合は、開発サーバーを起動する際に
--host 127.0.0.1フラグを使用して、開発サーバーを明示的にlocalhostインターフェースにバインドすることでリスクを軽減できます(例:npx react-native start --host 127.0.0.1)。
結論
この発見は、危険な関数がサードパーティの依存関係に存在する場合、いかに単純なコード実行の欠陥が依然として本番ソフトウェアに現れるかを示しています。この脆弱性は、安全なコーディング慣行と自動化されたセキュリティスキャンが、本番環境に到達する前に容易に悪用可能な欠陥を防ぐために不可欠であることを改めて認識させるものです。
元記事: https://gbhackers.com/critical-rce-bug-in-leading-react-native-npm-module/
