GLSA-202402-08:OpenSSL:多个漏洞

high Nessus 插件 ID 189977

语言:

描述

远程主机受到 GLSA-202402-08 中所述漏洞的影响(OpenSSL:多个漏洞)

- OpenSSL 支持通过旧版 EVP_CIPHER_meth_new() 函数和关联的函数调用创建自定义密码。OpenSSL 3.0 中已弃用此函数,建议应用程序作者使用新的提供程序机制以实现自定义密码。OpenSSL 版本 3.0.0 至 3.0.5 未正确处理传递到 EVP_EncryptInit_ex2()、EVP_DecryptInit_ex2() 和 EVP_CipherInit_ex2() 函数(以及其他名称类似的加密和解密初始化函数)的旧自定义密码。它没有直接使用自定义密码,而是错误地尝试从可用的提供程序获取等效密码。根据传递给 EVP_CIPHER_meth_new() 的 NID 找到等效的密码。此 NID 应代表给定密码的唯一 NID。但是,应用程序可能在对 EVP_CIPHER_meth_new() 的调用中错误地传递 NID_undef。以这种方式使用 NID_undef 时,OpenSSL 加密/解密初始化函数会将空密码匹配为等效密码,并将从可用的提供程序中提取。
如果已加载默认提供程序(或已加载提供此密码的第三方提供程序),此操作将会成功。使用空密码意味着以密文形式发出明文。
仅当应用程序使用 NID_undef 调用 EVP_CIPHER_meth_new() 并随后在对加密/解密初始化函数的调用中使用时,才会受到此问题的影响。仅使用 SSL/TLS 的应用程序不受此问题的影响。已在 OpenSSL 3.0.6 中修复(影响 3.0.0-3.0.5)。(CVE-2022-3358)

- 读取缓冲区溢出可在 X.509 证书验证中触发,在名称限制检查中更是如此。请注意,这会在证书链签名验证之后发生,并且需要 CA 签署恶意证书,或者要求应用程序在未能构建到受信任颁发者的路径的情况下继续证书验证。读取缓冲区溢出可能导致崩溃,进而导致拒绝服务攻击。理论上,该漏洞也可能导致私有内存内容(如私钥或敏感纯文本)泄露,尽管截至本公告发布之时,我们尚未发现任何会有效导致内存内容泄露的漏洞。在 TLS 客户端中,这可通过连接到恶意服务器来触发。在 TLS 服务器中,如果服务器请求客户端认证并连接了恶意客户端,就会触发此问题。(CVE-2022-4203)

- OpenSSL RSA 解密实现中存在一个基于时序的边信道,足以用于在 Bleichenbacher 式攻击中跨网络恢复明文。若要成功解密,攻击者必须能够发送大量的测试消息进行解密。
此漏洞会影响所有 RSA 填充模式:PKCS#1 v1.5、RSA-OEAP 和 RSASVE。例如,在 TLS 连接中,客户端通常会使用 RSA 向服务器发送经过加密的预主密钥。如果攻击者能够发现客户端与服务器之间的真正连接,则可向服务器发送测试消息并记录消息处理用时。在发送足够多的消息后,攻击者可恢复用于原始连接的预主密钥,进而解密通过该连接发送的应用程序数据。(CVE-2022-4304)

- 函数 PEM_read_bio_ex() 会读取 BIO 中的 PEM 文件,并解析和解码名称(例如,
CERTIFICATE)、任何标头数据和负载数据。如果函数成功完成上述操作,则会使用指向包含相关解码数据的缓冲区的指针填充 name_out、header 和 data 参数。
调用程序负责释放这些缓冲区。构建的 PEM 文件中可能不会含有负载数据。在这种情况下,PEM_read_bio_ex() 将返回故障代码,但会使用指向已完成释放的缓冲区的指针填充标头参数。如果调用程序也释放了此缓冲区,则会发生双重释放。这很有可能会导致崩溃。如果攻击者能够提供恶意 PEM 文件以进行解析,则可实现拒绝服务攻击。函数 PEM_read_bio() 和 PEM_read() 是对 PEM_read_bio_ex() 的简单封装,因此这两个函数也会直接受到影响。这些函数也会受到许多其他 OpenSSL 函数的间接调用,包括同样容易受到攻击的 PEM_X509_INFO_read_bio_ex() 和 SSL_CTX_use_serverinfo_file()。有时,在 OpenSSL 内部使用这些函数不易受到攻击,因为如果 PEM_read_bio_ex() 返回故障代码,调用程序便不会释放标头参数。这些位置包括 PEM_read_bio_TYPE() 函数以及 OpenSSL 3.0 中引入的解码器。OpenSSL asn1parse 命令行应用程序也会受到此问题的影响。(CVE-2022-4450)

- 公共 API 函数 BIO_new_NDEF 是辅助函数,用于通过 BIO 对 ASN.1 数据作流式处理。该函数主要在 OpenSSL 内部用于为 SMIME、CMS 和 PKCS7 提供流式传输功能支持,但也可能由最终用户应用程序直接调用。该函数从调用程序接收 BIO,在其前面附加一个新的 BIO_f_asn1 filter BIO 以形成 BIO 链,然后将 BIO 链的新标头返回给调用程序。在某些情况下(例如 CMS Recipient 公钥无效时),新的 filter BIO 将被释放,而该函数则会返回表示失败的 NULL 结果。但是,在这种情况下,由于 BIO 链未正确清理,所以调用程序传递的 BIO 仍会保留指向之前已释放的 filter BIO 的内部指针。如果调用程序随后继续调用 BIO 上的 BIO_pop(),则会发生释放后使用。这很有可能会导致崩溃。这种情况直接发生在内部函数 B64_write_ASN1() 中,不仅可能导致 BIO_new_NDEF() 被调用,还会导致 BIO 上的 BIO_pop() 在随后被调用。此内部函数依次由公共 API 函数 PEM_write_bio_ASN1_stream、PEM_write_bio_CMS_stream、PEM_write_bio_PKCS7_stream、SMIME_write_ASN1、SMIME_write_CMS 和 SMIME_write_PKCS7 调用。可能受到此问题影响的其他公共 API 函数包括 i2d_ASN1_bio_stream、BIO_new_CMS、BIO_new_PKCS7、i2d_CMS_bio_stream 和 i2d_PKCS7_bio_stream。OpenSSL CMS 和 S/MIME 命令行应用程序同样会受到影响。(CVE-2023-0215)

- 当应用程序尝试使用 d2i_PKCS7()、d2i_PKCS7_bio() 或 d2i_PKCS7_fp() 函数加载畸形 PKCS7 数据时,会触发读取时的无效指针取消引用。取消引用会导致应用程序崩溃,进而导致拒绝服务攻击。OpenSSL 中的 TLS 实现不会调用此函数,但是第三方应用程序可能会在不受信任的数据上调用这些函数。
(CVE-2023-0216)

- 当应用程序尝试使用 EVP_PKEY_public_check() 函数检查畸形 DSA 公钥时,会触发读取时的无效指针取消引用。这很有可能会导致应用程序崩溃。
由于此函数可在来自不受信任源来源的公钥上调用,因而攻击者可利用此漏洞造成拒绝服务攻击。OpenSSL 中的 TLS 实现不会调用此函数,但如果诸如 FIPS 140-3之类的标准中有他安全要求,应用程序可能会调用该函数。(CVE-2023-0217)

- 存在一个与 X.509 GeneralName 内的 X.400 地址处理相关的类型混淆漏洞。
X.400 地址被解析为 ASN1_STRING,但 GENERAL_NAME 的公共结构定义错误地将 x400Address 字段的类型指定为 ASN1_TYPE。随后,按照 OpenSSL 函数 GENERAL_NAME_cmp 的解读,此字段应为 ASN1_TYPE 而不是 ASN1_STRING。CRL 检查启用(即应用程序设置 X509_V_FLAG_CRL_CHECK 标记)后,攻击者利用此漏洞可向 memcmp 调用传递任意指针,让指针能够读取内存内容或引起拒绝服务。在大多数情况下,攻击者需要同时提供证书链和 CRL 才能发起攻击,而这两者都不需要具有有效的签名。如果攻击者仅控制其中一个输入,则另一个输入必须已包含作为 CRL 分发点的 X.400 地址,但这种情况并不常见。因此,此漏洞最有可能只影响本身已实现通过网络检索 CRL 功能的应用程序。(CVE-2023-0286)

- 在 PKCS7 signed 或 signedAndEnveloped 数据上验证签名时,会出现空指针取消引用漏洞。如果 OpenSSL 库中存在用于签名的哈希算法,但哈希算法的实现不可用,摘要初始化将无法进行。缺少对初始化函数的返回值的检查很可能会在以后导致摘要 API 的无效使用,进而导致崩溃。算法不可用的原因有二,其一是使用了启用 FIPS 配置的提供程序,更常见的原因是未加载旧版提供程序。
PKCS7 数据由 SMIME 库调用以及时间戳 (TS) 库调用处理。OpenSSL 中的 TLS 实现不会调用这些函数,但如果三方应用程序调用这些函数来验证不受信任数据上的签名,这些应用程序则会受到影响。(CVE-2023-0401)

- 在所有受支持的 OpenSSL 版本中发现一个与验证包含策略限制条件的 X.509 证书链相关的安全漏洞。攻击者可能通过创建触发指数级计算资源使用的恶意证书链来会利用此漏洞,进而对受影响的系统发起拒绝服务 (DoS) 攻击。策略处理默认处于禁用状态,但可以通过将 -policy 参数传递给命令行实用工具或者调用 X509_VERIFY_PARAM_set1_policies() 函数来启用。(CVE-2023-0464)

- 验证证书时使用非默认选项的应用程序可能容易受到恶意 CA 的攻击,从而规避某些检查。OpenSSL 以静默的方式忽略叶证书中的无效证书策略,并跳过该证书的其他证书策略检查。恶意 CA 可利用此缺陷故意断言证书策略无效,从而完全避开对证书的策略检查。策略处理默认处于禁用状态,但可以通过将 -policy 参数传递给命令行实用工具或者调用 X509_VERIFY_PARAM_set1_policies() 函数来启用。(CVE-2023-0465)

- 经记载,函数 X509_VERIFY_PARAM_add0_policy() 在执行证书验证时会隐式启用证书策略检查。但是,该函数的实现并未启用允许包含无效或不正确策略的证书通过证书验证的检查。
由于突然启用策略检查可能会中断现有部署,因此决定保留 X509_VERIFY_PARAM_add0_policy() 函数的现有行为。相反,需要 OpenSSL 执行证书策略检查的应用程序需要使用 X509_VERIFY_PARAM_set1_policies() 或通过使用 X509_V_FLAG_POLICY_CHECK 标记参数调用 X509_VERIFY_PARAM_set_flags() 来显式启用策略检查。
证书策略检查在 OpenSSL 中默认禁用,而在应用程序则不常用。
(CVE-2023-0466)

- 问题摘要:处理某些特制的 ASN.1 对象标识符或包含这些标识符的数据可能会非常缓慢。影响汇总:对于直接使用 OBJ_obj2txt() 或使用无消息大小限制的任何 OpenSSL 子系统 OCSP、PKCS7/SMIME、CMS、CMP/CRMF 或 TS 的应用程序,它们在处理这些消息时可能会遇到明显的延迟,这可能会导致拒绝服务。OBJECT IDENTIFIER 由一系列数字(子标识符)组成,其中大部分没有大小限制。
OBJ_obj2txt() 可用于将以 DER 编码形式(使用 OpenSSL 类型 ASN1_OBJECT)提供的 ASN.1 OBJECT IDENTIFIER 转换为其规范的数值文本形式,即十进制形式的 OBJECT IDENTIFIER 的子标识符,并以句点分隔。当 OBJECT IDENTIFIER 中的一个子标识符非常大时(即大得不可思议,占用了数十或数百 KiB),在文本中转换为十进制数字可能需要很长时间。时间复杂度为 O(n^2),其中“n”为以字节为单位的子标识符 (*)。OpenSSL 3.0 版引入了对使用字符串形式的名称/标识符提取加密算法的支持。这包括使用规范数字文本形式的 OBJECT IDENTIFIER 作为提取算法的标识符。可通过 ASN.1 结构 AlgorithmIdentifier 接收此类 OBJECT IDENTIFIER,该结构通常用于多种协议中,以指定应使用什么加密算法来签署或验证、加密或解密或摘要传递的数据。直接使用不受信任的数据调用 OBJ_obj2txt() 的应用程序会受到任何 OpenSSL 版本的影响。如果仅用于显示目的,则严重性是低危。在 OpenSSL 3.0 和更新版本中,该问题会影响子系统 OCSP、PKCS7/SMIME、CMS、CMP/CRMF 或 TS。它还会影响处理 X.509 证书的任何内容,包括验证其签名等简单内容。但该问题对 TLS 的影响相对较小,因为 OpenSSL 的所有版本对对等机的证书链都有 100KiB 的限制。此外,这仅影响已明确启用客户端认证的客户端或服务器。在 OpenSSL 1.1.1 和 1.0.2 版中,这仅影响显示不同的对象,例如 X.509 证书。我们假设此问题不会以造成拒绝服务的方式发生,因此这些版本被视为不受此问题的影响,不会引起关注,因此严重性为低危。(CVE-2023-2650)

- 问题摘要:AES-SIV 加密实现中有一个缺陷,会造成其忽略空的关联数据条目,并因而不会对这些项目进行验证。影响汇总:使用 AES-SIV 算法并希望将空数据条目认证为关联数据的应用程序可能会因删除、添加或重新排序此类空条目而受到误导,因为这些会被 OpenSSL 实现忽略。我们目前未发现任何此类应用程序。AES-SIV 算法允许在加密的同时对多个相关数据条目进行验证。要对空数据进行验证,应用程序必须调用 EVP_EncryptUpdate()(或 EVP_CipherUpdate()),并将空指针作为输出缓冲区,将 0 作为输入缓冲区长度。OpenSSL 中的 AES-SIV 实现仅会针对此类调用返回成功,而不是执行相关联的数据认证操作。因此,不会对空数据进行认证。由于此问题不影响非空关联数据认证,而且我们预计应用程序很少会使用空关联数据条目,因此将此问题定为“低危”问题。(CVE-2023-2975)

- 问题摘要:检查过长的 DH 密钥或参数时可能会非常缓慢。影响汇总:
使用函数 DH_check()、DH_check_ex() 或 EVP_PKEY_param_check() 检查 DH 密钥或 DH 参数的应用程序可能会遇到长时间的延迟。如果从不受信任的来源获取正在检查的密钥或参数,这可能导致拒绝服务。DH_check() 函数会对 DH 参数执行各种检查,其中一项检查会确认模数('p' 参数)不是太大。尝试使用非常大的模数时速度会很慢,且 OpenSSL 通常不会使用长度超过 10,000 位的模数。但是,DH_check() 函数会检查已提供密钥或参数的多个方面。即使发现提供的模数值过大,其中某些检查也会使用提供的模数值。调用 DH_check() 并提供从不受信任之来源获取的密钥或参数的应用程序可能容易遭受拒绝服务攻击。DH_check() 函数本身会被许多其他 OpenSSL 函数调用。调用任何其他函数的应用程序也可能会受到类似影响。受此影响的其他函数有 DH_check_ex() 和 EVP_PKEY_param_check()。使用“-check”选项时,OpenSSL dhparam 和 pkeyparam 命令行应用程序容易受到攻击。OpenSSL SSL/TLS 实现不受此问题影响。OpenSSL 3.0 和 3.1 FIPS 提供程序不受此问题影响。(CVE-2023-3446)

- 问题摘要:检查过长的 DH 密钥或参数时可能会非常缓慢。影响汇总:
使用函数 DH_check()、DH_check_ex() 或 EVP_PKEY_param_check() 检查 DH 密钥或 DH 参数的应用程序可能会遇到长时间的延迟。如果从不受信任的来源获取正在检查的密钥或参数,这可能导致拒绝服务。DH_check() 函数会对 DH 参数执行各种检查,修复 CVE-2023-3446 后,发现在执行部分此类检查期间,较大的 q 参数值也会触发超长计算。正确的 q 值(如果存在)不能大于模数 p 参数,因此如果 q 大于 p,则不必执行这些检查。调用 DH_check() 并提供从不受信任之来源获取的密钥或参数的应用程序可能容易遭受拒绝服务攻击。DH_check() 函数本身会被许多其他 OpenSSL 函数调用。调用任何其他函数的应用程序也可能会受到类似影响。受此影响的其他函数有 DH_check_ex() 和 EVP_PKEY_param_check()。
使用 -check 选项时,OpenSSL dhparam 和 pkeyparam 命令行应用程序容易受到攻击。OpenSSL SSL/TLS 实现不受此问题影响。OpenSSL 3.0 和 3.1 FIPS 提供程序不受此问题影响。(CVE-2023-3817)

请注意,Nessus 尚未测试这些问题,而是只依据应用程序自我报告的版本号进行判断。

解决方案

所有 OpenSSL 用户都应升级到最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=dev-libs/openssl-3.0.10

另见

https://security.gentoo.org/glsa/202402-08

https://bugs.gentoo.org/show_bug.cgi?id=876787

https://bugs.gentoo.org/show_bug.cgi?id=893446

https://bugs.gentoo.org/show_bug.cgi?id=902779

https://bugs.gentoo.org/show_bug.cgi?id=903545

https://bugs.gentoo.org/show_bug.cgi?id=907413

https://bugs.gentoo.org/show_bug.cgi?id=910556

https://bugs.gentoo.org/show_bug.cgi?id=911560

插件详情

严重性: High

ID: 189977

文件名: gentoo_GLSA-202402-08.nasl

版本: 1.0

类型: local

发布时间: 2024/2/4

最近更新时间: 2024/2/4

支持的传感器: Nessus

风险信息

VPR

风险因素: Medium

分数: 6.0

CVSS v2

风险因素: High

基本分数: 7.8

时间分数: 5.8

矢量: CVSS2#AV:N/AC:L/Au:N/C:C/I:N/A:N

CVSS 分数来源: CVE-2022-3358

CVSS v3

风险因素: High

基本分数: 7.5

时间分数: 6.5

矢量: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

时间矢量: CVSS:3.0/E:U/RL:O/RC:C

漏洞信息

CPE: p-cpe:/a:gentoo:linux:openssl, cpe:/o:gentoo:linux

必需的 KB 项: Host/local_checks_enabled, Host/Gentoo/release, Host/Gentoo/qpkg-list

易利用性: No known exploits are available

补丁发布日期: 2024/2/4

漏洞发布日期: 2022/9/29

参考资料信息

CVE: CVE-2022-3358, CVE-2022-4203, CVE-2022-4304, CVE-2022-4450, CVE-2023-0215, CVE-2023-0216, CVE-2023-0217, CVE-2023-0286, CVE-2023-0401, CVE-2023-0464, CVE-2023-0465, CVE-2023-0466, CVE-2023-2650, CVE-2023-2975, CVE-2023-3446, CVE-2023-3817