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' }のような入力で計算がハングし、サービスが停止します。
影響の深刻さ(暗号用途)
ノンス生成などにハッシュを用いる実装では、異なる入力で同一ノンスが発生し、署名スキームにおいて秘密鍵の推定・復元に直結するおそれがあります。署名、鍵導出、検証フローに組み込まれている場合は特に重大です。








