CVE-2026-4601jsrsasign库在11.1.1之前的版本中存在严重的加密步骤缺失漏洞。该漏洞源于DSA签名实现中的逻辑缺陷,攻击者可以通过特定的方式强制签名参数r或s为零。由于库在遇到此类异常签名时未进行重试操作,而是直接返回无效签名,攻击者可利用该数学特性通过解方程恢复出私钥,导致严重的密钥泄露风险。
该漏洞位于`KJUR.crypto.DSA.signWithMessageHash`过程中。DSA签名算法要求生成的签名参数r和s均不能为零,否则会破坏算法的安全性并导致私钥可被计算。在受影响的版本中,当随机数k导致r或s为零时,库未抛出错误或重新生成k,而是接受了该无效签名。利用原理基于DSA签名方程:s = k^-1(H(m) + xr) mod q。如果攻击者能迫使s=0,则方程变为0 = H(m) + xr mod q,即x = -H(m) * r^-1 mod q。由于H(m)(消息哈希)和r(签名的一部分)是公开的,攻击者可以直接计算出私钥x,从而完全破解该DSA密钥对。