OpenSSL国密爆出8.1分高危漏洞CVE-2021-3711
发布网友
发布时间:2024-09-28 06:17
我来回答
共1个回答
热心网友
时间:2024-12-14 19:06
全球成千上万的web服务器依赖的 OpenSSL 安全套接字层密码库,以及广泛应用于网银、在线支付、电商网站、门户网站、电子邮件等互联网应用的数据安全传输和安全存储,均使用 OpenSSL 实现。历史上,OpenSSL 已多次出现安全漏洞。2021 年 8 月 24 日,OpenSSL 发布了修复高危漏洞的版本 OpenSLL 1.1.1l,该漏洞编号为 CVE-2021-3711,打分为 8.1,属于严重漏洞。此漏洞影响 OpenSSL 1.1.1l 及之前的所有包含 SM2 商密算法版本,部分基于 OpenSSL 改造的商用国密算法版本也可能受此影响。
本文结合 OpenSSL 官方公告、修复前后的 OpenSSL 代码以及触发漏洞的 sm2 密文数据,深入分析了 CVE-2021-3711 漏洞原理,并评估了对腾讯自研国密算法库的影响。漏洞原因在于 SM2 解密时分配的内存可能不足以容纳解密后的结果,导致内存越界写。
具体分析如下:OpenSSL EVP 解密操作涉及两次调用 EVP_PKEY_decrypt,第一次返回长度作为分配堆内存的大小,第二次将解密结果存入分配的内存中。对于 SM2 解密,EVP_PKEY_decrypt 中的 ctx->op.ciph.cipher->decrypt 实现为 pkey_sm2_decrypt 函数。第一次调用时,指针 out 为 NULL,返回的长度用于分配内存。sm2_plaintext_size 函数用于计算实际需要的内存大小,其返回值等于 msg_len 减去 overhead。在 sm2_plaintext_size 函数中,overhead 的设置涉及 SM2 算法和 SM2 密文格式的知识,存在逻辑漏洞。具体而言,overhead 的设置可能过小,导致分配的内存不足以容纳解密后的结果,从而引发内存越界写。
触发此漏洞的数据示例为一组 SM2 密文,其长度为 116 字节,解析后显示 XCoordinate 占 32 字节,YCoordinate 占 31 字节,满足 SM2 椭圆曲线方程。在解密过程中,out 指向的内存为 10 字节,而解密结果为 11 字节,因此发生内存越界写。
针对此漏洞,腾讯自研的 TencentSM 国密算法库不受影响。腾讯自研了符合国密 SM2、SM3 以及 SM4 算法标准的 TencentSM,并在多个业务中平稳运行。TencentSM 自研了 SM2 解密实现,未使用和参考 OpenSSL 对应的代码,因此不受此漏洞影响。