CVE-2025-9288:流行 JavaScript 库存在严重漏洞,威胁全球 Web 安全

漏洞概述

广泛使用的JavaScript加密库sha.js近日披露了一个严重安全漏洞。该库实现了安全哈希算法(Secure Hash Algorithm,SHA)系列,每周下载量超过1400万次,是许多依赖加密哈希保障安全的Node.js和浏览器应用程序的核心组件。

该漏洞编号为CVE-2025-9288,CVSS评分为9.1分,源于输入类型检查缺失问题。攻击者可借此操纵哈希值计算过程,导致从哈希碰撞到加密密钥提取等一系列严重后果。

漏洞原理

漏洞根源在于该库未能正确验证输入数据类型。安全公告指出:"缺失输入类型检查会导致在恶意JSON可序列化输入时计算无效值、挂起或回滚哈希状态(包括将标记哈希转变为未标记哈希)"。

主要攻击方式

(1) 哈希状态回滚

攻击者通过输入类似{ length: -x }的参数,可有效回滚哈希函数的内部状态。这不仅会中断计算过程,还能将加密库中用于确保数据完整性的标记哈希转变为未标记哈希,从而破坏其保护机制。

(2) 数值误算与碰撞

攻击者可构造如下恶意输入:

复制
{ length: buf.length, ...buf, 0: buf[0] + 256 }1.

即使底层数值不同,该输入仍会生成与原缓冲区(buf)相同的哈希值。其他库(如bn.js)可能对这些值的解释存在差异,导致危险的逻辑不一致。

(3) 拒绝服务(DoS)攻击

通过提供类似{ length: 1e99 }的输入,攻击者可导致函数无限挂起,使依赖sha.js的应用程序陷入拒绝服务状态。

(4) 加密灾难:私钥提取

最严重的后果出现在通过哈希生成随机数的系统中。如果两个不同值产生匹配哈希但数值解释相异,攻击者可利用此漏洞推导出加密私钥。正如公告警告:"不同值的匹配随机数通常会导致私钥立即恢复。"

修复建议

使用sha.js的开发者和组织应立即升级至已修复版本(2.4.12)以防止漏洞被利用。

THE END