CVE-2021-3712
处理 ASN.1 字符串时的读取缓冲区溢出
- 已发布
- 2021年8月24日
- 已更新
- 2026年4月16日
- 分配 CNA
- openssl
- 观察到的证据
- 2026年8月8日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H高 · 未来 30 天
- 百分位
- 98.9%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
ASN.1 字符串在 OpenSSL 内部以 ASN1_STRING 结构表示,该结构包含一个保存字符串数据的缓冲区和一个保存缓冲区长度的字段。这与普通 C 字符串形成对比,普通 C 字符串以 NUL(0)字节结尾的缓冲区来表示字符串数据。虽然不是严格要求,但使用 OpenSSL 自身的 “d2i” 函数(以及其他类似的解析函数)解析的 ASN.1 字符串,以及任何通过 ASN1_STRING_set() 函数设置值的字符串,都还会在 ASN1_STRING 结构中对该字节数组进行 NUL 终止。然而,应用程序可以通过直接设置 ASN1_STRING 数组中的 “data” 和 “length” 字段,直接构造出不进行 NUL 终止的有效 ASN1_STRING 结构。使用 ASN1_STRING_set0() 函数也可能出现这种情况。已发现许多打印 ASN.1 数据的 OpenSSL 函数假定 ASN1_STRING 字节数组会以 NUL 终止,即使对于直接构造的字符串并不能保证这一点。当应用程序请求打印某个 ASN.1 结构,且该 ASN.1 结构包含由应用程序直接构造、未对 “data” 字段进行 NUL 终止的 ASN1_STRING 时,就可能发生读取缓冲区越界。在证书的名称约束(name constraints)处理过程中也可能发生同样的问题(例如,如果证书是由应用程序直接构造,而不是通过 OpenSSL 解析函数加载,并且该证书包含非 NUL 终止的 ASN1_STRING 结构)。在 X509_get1_email()、X509_REQ_get1_email() 和 X509_get1_ocsp() 函数中也可能发生这种情况。如果恶意行为者能够导致应用程序直接构造 ASN1_STRING,然后通过受影响的 OpenSSL 函数之一对其进行处理,则可能触发此问题。这可能导致崩溃(从而造成拒绝服务攻击),也可能导致私有内存内容(例如私钥或敏感明文)的泄露。已在 OpenSSL 1.1.1l 中修复(受影响版本为 1.1.1-1.1.1k)。已在 OpenSSL 1.0.2za 中修复(受影响版本为 1.0.2-1.0.2y)。
来源
1修复已停止维护(EOL)CentOS7 主机上 openssl CVE(https://nvd.nist.gov/vuln/detail/cve-2021-3712)的生产就绪步骤
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。