JavaScriptのForm-Dataライブラリで重大な脆弱性(CVE-2025-7783)

セキュリティニュース

投稿日時: 更新日時:

JavaScriptのForm-Dataライブラリで重大な脆弱性(CVE-2025-7783)

2025年7月、JavaScriptの定番ライブラリであるform-dataにて、マルチパート・インジェクションやリモートコード実行の引き金となるクリティカルな脆弱性(CVE-2025-7783)が報告されました。


影響度は
CVSS 9.4(Critical)と極めて高く、多くのNode.jsアプリケーションや自動化パイプラインで利用されているため、即時の対処が求められます。

影響を受けるバージョン

  • 2.5.4 未満

  • 3.0.0 〜 3.0.3

  • 4.0.0 〜 4.0.3

修正済みバージョン

  • 2.5.4

  • 3.0.4

  • 4.0.4

問題の本質:境界値生成に Math.random() を使用

この脆弱性は、form-dataがmultipart/form-dataリクエストのboundary(区切り文字)を Math.random() で生成している点に起因します。
Math.random() は暗号学的に安全ではなく、攻撃者が一定数の出力値を観測できれば、内部状態を逆算して今後の出力値(つまりboundary値)を予測できるという性質があります。

// form-data/lib/form_data.js の問題箇所(抜粋)
boundary += Math.floor(Math.random() * 10).toString(16);

この値が予測されると、攻撃者は同じboundaryを含むリクエストを細工でき、任意の追加フィールドを注入可能になります。
これは、multipartリクエストの構文ルールを逆手に取ったパラメータインジェクションの一種であり、APIや社内連携先への意図しないパラメータ上書きやデータ送信が可能になるリスクを伴います。

悪用の前提条件とリスク

攻撃が成立する条件

  1. Math.random()の出力を観測できること
     例:アプリ側で x-request-idtrace-id をMath.random()で生成している場合
     ※OpenTelemetryや一部のロギング基盤ではこの実装が一般的です

  2. form-dataを用いたリクエストに、攻撃者が一部のフィールドを操作可能なこと
     例:ユーザー入力を含むWebhook転送やファイルアップロード処理など

この2つの条件が揃えば、攻撃者はform-data経由で意図しない追加データや認証ヘッダーを内部システムに送ることができるようになります。