JavaScriptのライブラリsha.jsで致命的な脆弱性(CVE-2025-9288)

セキュリティニュース

投稿日時: 更新日時:

JavaScriptのライブラリsha.jsで致命的な脆弱性(CVE-2025-9288)

JavaScriptのハッシュ実装「sha.js」に、入力型の検証不足が原因の致命的な脆弱性(CVE-2025-9288、CVSS 9.1)が見つかりました。

脆弱性の概要

任意オブジェクトを入力に紛れ込ませることで、ハッシュ内部状態の巻き戻し、計算結果の破壊(衝突)、ハングによるDoSを誘発し得ます。

Node.jsおよびブラウザ双方の依存に影響し、バージョン2.4.11以下までが本脆弱性の対象となり、2.4.12以上で修正済みです。

npmの最新パッケージへ更新することで本件は解消します。

根本的な原因

本来はBufferまたはstringのみを受け付けるべきところ、型チェックが甘いため、JSON化可能なオブジェクトが通過し、

length等のプロパティを誤解釈します。その結果、ブロック処理やタグ付きハッシュの扱いが破綻し、未定義動作に至ります。

想定される悪用パターン

  • 状態の巻き戻し{ length: -x } により内部状態が逆行し、タグ付きハッシュが非タグ化されるなど不正遷移が起きます。

  • 値の誤計算・衝突{ length: buf.length, ...buf, 0: buf[0] + 256 } で元のバッファと同一ハッシュを生成しつつ、他ライブラリ(例:bn.js)では別解釈となり、後段処理を破壊します。

  • DoS{ length: '1e99' } のような入力で計算がハングし、サービスが停止します。

影響の深刻さ(暗号用途)

ノンス生成などにハッシュを用いる実装では、異なる入力で同一ノンスが発生し、署名スキームにおいて秘密鍵の推定・復元に直結するおそれがあります。署名、鍵導出、検証フローに組み込まれている場合は特に重大です。