クラッシュコード:Node.js、フレームワークを破壊し得るDoS脆弱性に対する重大修正を公開

Node.js開発チームは、運用環境の大半でサービス拒否(DoS)状態を引き起こし得る高深刻度の脆弱性を緩和するための重大なセキュリティ更新を公開しました。問題の核心は、非同期処理のライフサイクルを追跡するために不可欠な仕組みであるasync_hooksモジュールが有効化されている際に、スタックオーバーフローを誤って管理してしまう点にあります。

この欠陥は、async_hooksの利用時にのみ顕在化します。そのような状況で、検証されていないユーザー入力が再帰の深さ制限を引き起こすと、Node.jsは終了コード7で突然終了し、アプリケーション側で例外を処理する余地が一切なくなります。この障害により、特に再帰の深さが予測不能な外部テレメトリによって左右されるシステムは、深刻な脆弱性にさらされます。

この脆弱性の深刻さは、async_hooksを基盤として構築されているAsyncLocalStorageが、React Server Components、Next.js、ならびにDatadog、New Relic、Dynatrace、Elastic、OpenTelemetryの診断ツールなど、主要なフレームワークや可観測性スイートに広く組み込まれているという事実によって、さらに増幅されます。この欠陥はNode.js 8.xから18.xまでのすべてのバージョンにわたって存在しますが、これらのバージョンはサポート終了(EOL)に達しているため、正式な修正は提供されません。

この脆弱性は、Node.js 20.20.0、22.22.0、24.13.0、25.3.0で解決されています。実装されたパッチによりスタックオーバーフローを捕捉できるようになり、事象を致命的なシステム崩壊として扱うのではなく、ユーザーランドのコードへエラーを再スローします。

エコシステムへの影響が甚大であるにもかかわらず、Node.jsコアチームはこの解決策を暫定的な措置と位置付けています。これは、スタックオーバーフローの挙動がECMAScript標準で規定されておらず、V8エンジンもそれを正式にはセキュリティ脆弱性として認識していないためです。さらに、本来は最後の手段としてのみ想定されていたuncaughtExceptionハンドラーには、依然として固有の制約が残っています。

専門家は、この解決策がエラー処理の予測可能性を高め、突然のアプリケーション終了というリスクを大幅に低減するとしています。その結果、影響を受けるフレームワークの利用者に加え、ホスティング事業者も、可能な限り迅速に保護されたバージョンへ移行するよう強く促されています。同時にNode.jsは、データ流出、シンボリックリンクを介した機微ファイルへのアクセス、リモートからのサービス拒否攻撃をそれぞれ可能にする、CVE-2025-55131CVE-2025-55130CVE-2025-59465という追加の高リスク脆弱性3件も無効化しました。

翻訳元: https://meterpreter.org/the-crash-code-node-js-issues-critical-fix-for-framework-breaking-dos-flaw/

ソース: meterpreter.org