Critical JavaScript Library Vulnerability Exposes Apps to Remote Attacks
2025/07/23 gbhackers — 人気の JavaScript パッケージである form-data に、深刻なセキュリティ脆弱性が発見された。このリモート攻撃を引き起こす脆弱性は、予測可能な境界値の生成に起因するものであり、その悪用により数千のアプリケーションに影響が及ぶ可能性がある。この脆弱性 CVE-2025-7783 (CVSS 4.0:9.4) を発見し、2025年7月18日に公開したのは、JavaScript の著名な開発者であり、TC39 仕様の編集者でもあった、Jordan Harband (ljharb) である。

脆弱性 CVE-2025-7783 の詳細
マルチパート形式のフォーム・エンコード・データ用の境界値を form-data が生成する際に、JavaScript の Math.random() 関数に依存することに、この脆弱性は起因する。
この、無害に見えるデザインの選択だが、擬似ランダムによる予測可能な値を Math.random() が生成するため、重大なセキュリティ弱点となっている。つまり、高度な攻撃者に悪用されると、HTTP リクエストへの悪意のパラメーター注入が可能になってしまう。
| Attribute | Value |
| CVE ID | CVE-2025-7783 |
| Severity | Critical |
| CVSS 4.0 Score | CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N |
| CWE Classification | CWE-330 (Use of Insufficiently Random Values) |
| Affected Package | form-data (npm) |
| Vulnerable Versions | < 2.5.4, 3.0.0-3.0.3, 4.0.0-4.0.3 |
| Patched Versions | 2.5.4, 3.0.4, 4.0.4 |
| Attack Vector | Network |
| Attack Complexity | High |
この脆弱性が影響を及ぼす範囲は、form-data パッケージのバージョン 2.5.4 未満/3.0.0〜3.0.3/4.0.0〜4.0.3 となる。
これらの脆弱なバージョンを使用する組織は、パラメータ・インジェクション攻撃のリスクにさらされ、内部システムへの侵害による、機密データの漏洩の可能性を抱えることになる。
ターゲット・アプリにより生成される Math.random() の値を観察する攻撃者は、擬似乱数生成器 (PRNG:Pseudo Random Number Generator) の内部状態を、数学的な手法を用いて予測し、この脆弱性の悪用を可能にする。
PRNG の状態を特定した攻撃者は、将来におけるバウンダリ値を予測できるようになり、その値と攻撃者が制御するフィールドを取り込んだ、悪意のペイロード作成を達成する。
この攻撃シナリオには、以下の2つの条件が必要となる:
- 対象アプリにより生成される、Math.random() の値の観測
- form-data リクエスト内の、操作が可能な1つのフィールド
観測の手段として多用される可能性があるのは、分散トレーシングで用いられるリクエスト ID ヘッダーである。それらの生成においては、Math.random() が頻繁に使用される。
したがって、form-data を用いるアプリが、ユーザーが制御するデータをバックエンドに送信しながら、何らかの形で Math.random() の値を外部に漏らす場合に、この脆弱性の影響を受けることになる。
この脆弱性の悪用に成功した攻撃者は、リクエスト内への任意のパラメータ注入を達成し、意図された値の上書きや、セキュリティ制御を回避するための、悪意のデータ作成/挿入を可能にする。
この脆弱性の悪用により、ネットワーク経由での攻撃が可能になる。その結果として、機密データやシステムの完全性に重大な影響を生じることから、深刻度 Critical と評価されている。
なお、この脆弱性に対する PoC エクスプロイトが、すでにセキュリティ研究者たちにより開発されている。
それぞれのユーザー組織に推奨されるのは、現時点で使用しているバージョンに応じて、パッチ適用済みのバージョン 2.5.4/3.0.4/4.0.4 へと、速やかにアップグレードすることだ。
これらのパッチにより、Math.random() が暗号的に安全な乱数生成に置き換えられ、今回の攻撃の原因となっていた予測可能性の問題は解消している。
この脆弱性 CVE-2025-7783 ですが、JavaScript の Math.random() を使って境界値を生成していたことに原因があるとのことです。見た目は安全そうでも、実際には予測されやすい値が出るため、攻撃者に悪用されるリスクがあったと、この記事は指摘しています。PoC も提供されていますので、ご利用のチームは、ご注意ください。よろしければ、JavaScript で検索も、ご参照ください。
You must be logged in to post a comment.