CVE-2025-9288:流行 JavaScript 庫(kù)存在嚴(yán)重漏洞,威脅全球 Web 安全
漏洞概述
廣泛使用的JavaScript加密庫(kù)sha.js近日披露了一個(gè)嚴(yán)重安全漏洞。該庫(kù)實(shí)現(xiàn)了安全哈希算法(Secure Hash Algorithm,SHA)系列,每周下載量超過(guò)1400萬(wàn)次,是許多依賴(lài)加密哈希保障安全的Node.js和瀏覽器應(yīng)用程序的核心組件。
該漏洞編號(hào)為CVE-2025-9288,CVSS評(píng)分為9.1分,源于輸入類(lèi)型檢查缺失問(wèn)題。攻擊者可借此操縱哈希值計(jì)算過(guò)程,導(dǎo)致從哈希碰撞到加密密鑰提取等一系列嚴(yán)重后果。

漏洞原理
漏洞根源在于該庫(kù)未能正確驗(yàn)證輸入數(shù)據(jù)類(lèi)型。安全公告指出:"缺失輸入類(lèi)型檢查會(huì)導(dǎo)致在惡意JSON可序列化輸入時(shí)計(jì)算無(wú)效值、掛起或回滾哈希狀態(tài)(包括將標(biāo)記哈希轉(zhuǎn)變?yōu)槲礃?biāo)記哈希)"。
主要攻擊方式
(1) 哈希狀態(tài)回滾
攻擊者通過(guò)輸入類(lèi)似{ length: -x }的參數(shù),可有效回滾哈希函數(shù)的內(nèi)部狀態(tài)。這不僅會(huì)中斷計(jì)算過(guò)程,還能將加密庫(kù)中用于確保數(shù)據(jù)完整性的標(biāo)記哈希轉(zhuǎn)變?yōu)槲礃?biāo)記哈希,從而破壞其保護(hù)機(jī)制。
(2) 數(shù)值誤算與碰撞
攻擊者可構(gòu)造如下惡意輸入:
{ length: buf.length, ...buf, 0: buf[0] + 256 }即使底層數(shù)值不同,該輸入仍會(huì)生成與原緩沖區(qū)(buf)相同的哈希值。其他庫(kù)(如bn.js)可能對(duì)這些值的解釋存在差異,導(dǎo)致危險(xiǎn)的邏輯不一致。
(3) 拒絕服務(wù)(DoS)攻擊
通過(guò)提供類(lèi)似{ length: '1e99' }的輸入,攻擊者可導(dǎo)致函數(shù)無(wú)限掛起,使依賴(lài)sha.js的應(yīng)用程序陷入拒絕服務(wù)狀態(tài)。
(4) 加密災(zāi)難:私鑰提取
最嚴(yán)重的后果出現(xiàn)在通過(guò)哈希生成隨機(jī)數(shù)的系統(tǒng)中。如果兩個(gè)不同值產(chǎn)生匹配哈希但數(shù)值解釋相異,攻擊者可利用此漏洞推導(dǎo)出加密私鑰。正如公告警告:"不同值的匹配隨機(jī)數(shù)通常會(huì)導(dǎo)致私鑰立即恢復(fù)。"
修復(fù)建議
使用sha.js的開(kāi)發(fā)者和組織應(yīng)立即升級(jí)至已修復(fù)版本(2.4.12)以防止漏洞被利用。





























