SM2 解密缓冲区溢出 (CVE-2021-3711)
严重性:高
为了解密 SM2 加密数据,应用程序应调用API 函数 EVP_PKEY_decrypt()。通常一个应用程序会调用这个功能两次。第一次,在进入时,“out”参数可以是 NULL 并且,退出时,“outlen”参数填充了所需的缓冲区大小保存解密后的明文。然后,应用程序可以分配足够的大小的缓冲区并再次调用EVP_PKEY_decrypt(),但这次传递一个非 NULL“输出”参数的值。
SM2 解密代码实现中的一个错误意味着计算保存返回的明文所需的缓冲区大小第一次调用 EVP_PKEY_decrypt() 可以小于所需的实际大小第二个电话。当 EVP_PKEY_decrypt() 为应用程序第二次使用太小的缓冲区调用。
恶意攻击者能够将 SM2 内容解密到应用程序可能会导致攻击者选择的数据溢出缓冲区最多最多 62 字节改变其他数据的内容缓冲区,可能会改变应用程序行为或导致应用程序碰撞。缓冲区的位置取决于应用程序,但通常是堆分配。
OpenSSL 1.1.1k 及以下版本受此问题影响。这些用户版本应升级到 OpenSSL 1.1.1l。
OpenSSL 1.0.2 不受此问题的影响。
OpenSSL 3.0 alpha/beta 版本也受到影响,但此问题将在最终发布之前解决。
John Ouyang 于 2021 年 8 月 12 日向 OpenSSL 报告了此问题。修复由马特卡斯威尔开发。