NestJS の脆弱性 CVE-2025-54782 が FIX:JavaScript サンドボックスの欠陥と任意のコード実行

NestJS Vulnerability Allows Code Execution on Developer Machines

2025/08/04 gbhackers — NestJS フレームワークで発見された、深刻なリモート・コード実行の脆弱性を悪用する攻撃者は、開発者のマシン上で任意のコード実行を可能にするという。この脆弱性 CVE-2025-54782 (CVSS:9.4) は @nestjs/devtools-integration パッケージに存在し、単純な Web ベースの攻撃によりシステムの完全な侵害にいたる可能性があることから、最も深刻な評価が与えられている。

脆弱性の概要

この欠陥は、@nestjs/devtools-integration パッケージにおける、安全が確保されないコード実行の慣習と、クロスオリジン・リクエストに対する不適切なプロテクションとの組み合わせに起因している。

プログラムの開発中に、このパッケージを有効化すると、”/inspector/graph/interact” に API エンドポイントを持つ、ローカル HTTP サーバが公開され、安全が確保されないサンドボックス環境内に JavaScript コードを受け入れて実行してしまう。

FieldValue
CVE IDCVE-2025-54782
CVSS v4 ScoreCritical (10.0/10)
Attack VectorAdjacent
Attack ComplexityLow

この脆弱性を発見したのは、サイバー・セキュリティ企業 Socket の依頼を受けた研究者 JLLeitschuh である。

廃止済みの safe-eval ライブラリに類似する JavaScript サンドボックスを、このパッケージが実装しているところに、問題のコアがある。このサンドボックスは、Node.js の vm.runInNewContext メソッドを使用している。しかし、信頼できないコードに対する安全性を、このメソッドが提供しないことが、Node.js のドキュメントには明記されている。

この実装により、サンドボックス回避に関する既知の手法が悪用され、任意のコード実行が可能となる。

さらに、クロスオリジン・リクエストに対する不十分な検証も、問題を深刻化させている。このサーバは、Access-Control-Allow-Origin を固定ドメインに設定しているが、Origin-Type および Content-Type ヘッダの検証に失敗する。

その結果として、text/plain コンテンツ・タイプの POST リクエストを、HTML フォームや単純な XMLHttpRequest を用いて送信する攻撃者は、CORS preflight チェックを回避することで、この脆弱性を悪用できる。

この攻撃手法は極めて単純であるため、特に警戒が必要である。攻撃者が作成し得るものには、HTML フォームや JavaScript を取り込んだ悪意あるサイトがあるため、開発者が Web ページにアクセスしたときに、ローカル開発サーバへ向けて細工されたリクエストが自動的に送信される恐れがある。

このエクスプロイトには、悪意の Web ページを閲覧するだけでコード実行を引き起こす可能性があり、ほとんどユーザー操作を必要としない。

この PoC エクスプロイトが示すのは、開発者マシン上でアプリケーションを起動するコマンドなどを、攻撃者が実行するシナリオであり、データ窃取やシステム侵害といった悪質な行為も可能とされている。

この脆弱性への対応として、以下の修正をメンテナたちは実施している:

  • 安全が確保されないサンドボックスを @nyariv/sandboxjsで置き換え
  • 適切な Origin-Type および Content-Type ヘッダの検証を追加
  • devtools 接続に認証機構を導入

このパッケージを使用する開発者に対して強く推奨されるのは、修正済みのバージョンへと速やかにアップグレードし、この重大なセキュリティ・リスクに対処することだ。