CVE-2026-5477wolfSSL的wolfCrypt CMAC实现中存在整数溢出漏洞。该漏洞源于`wc_CmacUpdate`函数用于跳过首个块XOR链接的保护逻辑使用了32位变量。当处理的数据量达到2^28个块(约4GB)时,该变量会发生回绕归零,导致错误地丢弃当前的CBC-MAC链状态。这使得攻击者能够利用共同的消息后缀,在无需密钥的情况下伪造CMAC标签,实施前缀替换攻击,严重破坏消息完整性。
该漏洞位于wolfSSL的`wc_CmacUpdate`函数中。CMAC算法依赖于对每个数据块进行XOR操作以维护CBC-MAC链状态。代码原使用`if (cmac->totalSz != 0)`条件来优化第一个块的处理(因为摘要初始化为0,XOR操作为空操作)。然而,`totalSz`被定义为32位无符号整数(word32)。当处理的数据量超过4GB(即2^28个块)时,`totalSz`会溢出并回绕至0。此时,保护条件误判当前块为“第一个块”,从而跳过了关键的XOR链接步骤,导致内部链状态被重置。攻击者若诱导应用处理大量数据触发溢出,随后发送具有特定后缀的消息,即可生成有效的CMAC标签,实现零工作量伪造。