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値)を予測できるという性質があります。
この値が予測されると、攻撃者は同じboundaryを含むリクエストを細工でき、任意の追加フィールドを注入可能になります。
これは、multipartリクエストの構文ルールを逆手に取ったパラメータインジェクションの一種であり、APIや社内連携先への意図しないパラメータ上書きやデータ送信が可能になるリスクを伴います。
悪用の前提条件とリスク
攻撃が成立する条件
-
Math.random()の出力を観測できること
例:アプリ側でx-request-idやtrace-idをMath.random()で生成している場合
※OpenTelemetryや一部のロギング基盤ではこの実装が一般的です -
form-dataを用いたリクエストに、攻撃者が一部のフィールドを操作可能なこと
例:ユーザー入力を含むWebhook転送やファイルアップロード処理など
この2つの条件が揃えば、攻撃者はform-data経由で意図しない追加データや認証ヘッダーを内部システムに送ることができるようになります。








