CVE-2026-23967sm-crypto是一个提供中国密码学算法SM2、SM3和SM4的JavaScript实现库,广泛应用于需要国密算法的Web应用中。该库在0.3.14版本之前存在签名可塑性(Signature Malleability)漏洞,存在于SM2签名验证逻辑中。攻击者可以利用此漏洞从已存在的有效签名派生出一个新的有效签名,而无需知道私钥。这意味着攻击者可以对已签名的消息进行签名伪造,绕过签名验证机制。由于SM2算法常用于数字签名、身份认证等安全场景,此漏洞可能导致签名验证机制失效,使攻击者能够冒充合法用户签署文件或消息,进而影响系统的完整性和身份认证安全性。该漏洞无需认证即可利用,CVSS评分7.5,属于高危漏洞。
SM2签名算法基于椭圆曲线密码学,其签名由(r, s)两个值组成。签名可塑性漏洞允许攻击者在已知有效签名(r, s)的情况下,通过数学变换生成另一个有效签名(r, n-s),其中n为椭圆曲线阶。SM2签名验证过程检查r和s的值是否在合理范围内,但由于未对s进行唯一性约束,攻击者可以构造s' = n - s,生成与原签名不同但同样有效的签名。在实际攻击场景中,攻击者可以:1) 获取目标消息的原始签名;2) 计算s' = n - s;3) 生成新的签名(r, s');4) 使用新签名通过验证。这种攻击不需要知道私钥,可以绕过基于签名的访问控制和电子签名验证系统。修复版本0.3.14通过添加s值的唯一性检查或规范化处理来解决此问题。