CVE-2026-23966sm-crypto是一个提供中国商用密码算法SM2、SM3和SM4的JavaScript实现的开源库。该库在0.3.14版本之前存在一个严重的私钥恢复漏洞,存在于SM2解密逻辑中。攻击者通过多次与SM2解密接口进行交互,可以在大约数百次交互后完全恢复私钥。由于SM2算法是中国国家密码管理局发布的商用密码标准,广泛应用于中国的电子商务、金融系统和政府信息系统中,此漏洞的危胁极其严重。攻击者一旦获取私钥,即可解密所有使用该密钥加密的通信内容,冒充签名,并造成数据泄露和身份伪造等严重后果。此漏洞无需特殊权限或用户交互即可利用,属于高危漏洞。
该漏洞源于sm-crypto库中SM2解密实现的安全缺陷。SM2算法基于椭圆曲线密码学,其解密过程涉及复杂的数学运算。攻击者利用SM2解密接口的侧信道信息,通过构造特定的密文输入并观察解密结果,在多次尝试后可以逐步推导出私钥的具体数值。这种攻击属于选择密文攻击(CCA)的变体,利用了SM2解密过程中的某些可预测特性。攻击者需要准备约数百次精心设计的解密请求,每次请求都包含经过特殊构造的密文数据。通过分析解密成功/失败或执行时间的细微差异,攻击者可以逐步缩小私钥的可能范围,最终精确恢复完整的私钥值。修复版本0.3.14通过改进解密逻辑的安全性来防止此类攻击。