OpenSSL严重安全漏洞记录
2014-06-15 17:43:40 阿炯

严重安全漏洞-CCS注入

OpenSSL的ChangeCipherSpec 处理再报严重安全漏洞,该漏洞使得攻击者可以拦截恶意中间节点加密和解密数据,同时迫使使用弱密钥的SSL客户端暴露在恶意节点。


当软件使用OpenSSL的受影响版本,通过网页浏览、电子邮件和VPN进行内容和身份验证等加密通讯时会有篡改的风险。

受影响的版本包括:
OpenSSL 1.0.1 through 1.0.1g
OpenSSL 1.0.0 through 1.0.0l
all versions before OpenSSL 0.9.8y

未影响版本:
OpenSSL 1.0.1h
OpenSSL 1.0.0m
OpenSSL 0.9.8za

关于该漏洞的详细说明请看这里

高危漏洞-允许攻击者解密HTTPS流量

OpenSSL的维护者修复了一个高危漏洞,该漏洞允许攻击者能获得解密HTTPS等加密流量的密钥。漏洞的潜在影响虽然严重,但需要满足多个条件才能被利用:漏洞只存在于OpenSSL 1.0.2中;依靠OpenSSL的应用程序必须配置使用基于DSA的group去生成基于Diffie Hellman密钥交换的临时密钥,在默认情况下它将容易受到密钥恢复攻击。OpenSSL的维护者接到报告两周之内释出了新版1.0.2f,推荐使用OpenSSL 1.0.2的用户升级到新版。此外,最新版本还将拒绝密钥长度短于1024bits的DH密钥协商。

SSL 3.0中发现安全漏洞

2014年11月2日,Google安全团队成员报告在SSL 3.0加密协议中发现了一个安全漏洞(被称为POODLE攻击),允许攻击者计算出加密通讯的明文内容。SSL 3.0已有近15年历史,已被TLS 1.0/1.1/1.2所取代,但今天的绝大部分浏览器仍然向后兼容SSL 3.0,默认情况下会使用新版的TLS协议,但如果协议握手失败,浏览器会尝试使用旧版的SSL 3.0。攻击者可以制造握手失败诱使浏览器使用SSL 3.0建立加密连接,然后利用漏洞破解加密内容。禁用浏览器的SSL 3.0支持足以减轻这一问题,但兼容性问题又会出现。有意思的是,Google早已从Chrome中移除了启用禁用 SSL版本的选项。开发者表示他们正测试在Chrome中禁用SSL 3.0,并计划未来几个月从产品中全面移除SSL 3.0支持。

HTTPS 再爆漏洞 企业需升级SSL/TLS加密算法

保密通讯核心SSL遭遇Heartbleed漏洞

OCSP状态请求延期导致无限的内存增长(CVE-2016-6304)


严重级别:高等

恶意的客户端会发送一个过大的OCSP状态请求延期。如果这个客户端不断请求重新协商,每次发送大量OCSP状态请求延期,这会使服务器的内存无限消耗。这最终会因为内存被耗尽而导致DoS攻击。使用默认配置的服务器是容易遭受攻击的,即使他们不支持OSCP。通过使用“无OCSP”配置时间选项不会受影响。服务器使用OpenSSL 1.0.1g之前的版本并使用默认配置不会易遭受攻击,除非一个应用程序明确允许支持OCSP,建议OpenSSL 1.1.0用户升级到1.1.0a,OpenSSL 1.0.2用户升级到1.0.2i,OpenSSL 1.0.1用户升级到1.0.1u,这个问题于2016/08/29由Shi Lei(Gear Team,Qihoo 360 Inc)报告,由OpenSSL开发团队的Matt Caswell修复

SSL_peek()挂断空记录(CVE-2016-6305)


严重级别:中等

OpenSSL 1.1.0 SSL/TLS 会在发送一个会话给SSL_peek()的期间且发送一个空记录时挂起。这可能会被恶意的同行通过DoS攻击利用。建议使用OpenSSL 1.1.0的用户升级到 1.1.0a,这个问题于2016/09/10由Alex Gaynor报告,由OpenSSL开发团队的Matt Caswell修复。

OpenSSL还公布很多严重程度为低等的漏洞,具体信息请访问原网站查看。此外OpenSSL项目组再次提醒用户,1.0.1版本分支的补丁支持将在12月31日结束。截止到现在,OpenSSL项目组在今年一共发布了三次的安全更新,累计修复了16个安全漏洞。

2020年04月23日,OpenSSL 项目发布安全公告称存在一个影响 OpenSSL 1.1.1d, 1.1.1e 和 1.1.1f 的高危漏洞(CVE-2020-1967),该漏洞可被用于发起 DoS 攻击。根据官方对该漏洞的描述,在 TLS 1.3 握手期间或握手之后调用 SSL_check_chain() 函数的服务器或客户端应用可能会导致崩溃,原因是不正确处理"signature_algorithms_cert" TLS 扩展而引起的空指针引用。如果从另一方接收到一个无效或未被识别的签名算法,则会发生崩溃,这可能会被恶意攻击者利用并发起 DoS 攻击。

该漏洞由 Bernd Edlinger 通过 GCC 中的新静态分析通道 -fanalyzer 发现,并已于2020年4月7日向 OpenSSL 报告。对于受影响的 OpenSSL 1.1.1(1.1.1d,1.1.1e 和 1.1.1f)用户,建议尽可能快地升级到 1.1.1g,OpenSSL 1.1.1d 之前的版本不受此漏洞影响。更早的版本如 OpenSSL 1.0.2 和 1.1.0 也均未受影响,不过这些版本都不再被支持,也无法再接受更新。建议使用这些版本的用户升级至 OpenSSL 1.1.1。

DES和Triple DES 信息泄露漏洞(CVE-2016-2183)

主机有DES和Triple DES 信息泄露漏洞的漏洞被要求修复,该漏洞详细描述:TLS(Transport Layer Security,安全传输层协议)是一套用于在两个通信应用程序之间提供保密性和数据完整性的协议。SSH(全称Secure Shell)是国际互联网工程任务组(IETF)的网络小组(Network Working Group)所制定的一套创建在应用层和传输层基础上的安全协议。IPSec(全称InternetProtocolSecurity)是国际互联网工程任务组(IETF)的IPSec小组建立的一组IP安全协议集。DES和Triple DES都是加密算法。;TLS、SSH和IPSec协议和其它协议及产品中使用的DES和Triple DES密码算法存在安全漏洞。远程攻击者可通过实施生日漏洞获取明文数据。

安全报告提供的修复建议:
目前厂商已经发布了升级补丁以修复此安全问题,补丁获取链接
通过补丁进行修复不现实,相关的证书已经生成了。可通过禁用DES相关的内容来达到修复的目的。

检查配置:根据描述为443端口暴露出来的,这个端口是服务器正常提供https服务的端口,使用nginx进行配置并提供服务。其中关于nginx的ssl配置里发现确实有关于DES的配置项,删除掉里面的ECDHE-RSA-DES-CBC3-SHA EDH-RSA-DES-CBC3-SHA DES-CBC3-SHA的相关内容。保留!DES的选项。然后重新启动nginx。

验证方法:nmap -sV --script ssl-enum-ciphers -p 443 yourhostname

针对 64位块大小的 TLS 密码的 SWEET32: Birthday 攻击(CVE-2016-2183)

Red Hat 产品安全团队在 SSL/TLS 协议里的块密码里发现一个问题,在某些配置下可能遭受碰撞攻击(collision attack)。这个漏洞被评级为 Moderate 并分配了[CVE-2016-2183]。目前对于 Red Hat 产品用户,这个问题不需要任何更新或操作。更多细节请参阅下面解决方案章节的内容。

背景

传统的块密码的块大小为 64 位,在用于 CBC 模式下易受碰撞攻击。支持将使用 3DES 的密码组作为对称加密密码的所有版本的 SSL/TLS 协议都会受到影响(如 ECDHE-RSA-DES-CBC3-SHA)。在 Red Hat Enterprise Linux 6 和 7 附带的 OpenSSL 版本里,基于 DES 的密码组列在支持 AES-128(和 PFS 密码组一起)及 AES-256 下面。这意味着只有在服务器显性地禁用 AES-128 和 AES-256 时才会选择 DES 密码。在 Red Hat Enterprise Linux 5 附带的 OpenSSL 版本里,基于 DES 的密码组也列在 AES-256 下面,但在 AES-128 之上。此时只有服务器显性地禁用 AES-256 时才会选择 DES 密码。

块密码的安全性取决于密钥大小(k)。因此针对块密码的最佳攻击方式是复杂度为 2k 的穷尽密钥搜索攻击。然而当使用块密码以 CBC 等模式加密大量数据时,块大小也在某种程度上决定了安全性。当使用 CBD 加密模式时,在用相同密钥加密的数据的 2n/2 块后会导致简单的 birthday 攻击,预期会出现两个密码块间的冲突。输出里的冲突表示输入是相同的。这个数据及几个条件(在下文里讨论)可以用来抽取加密数据的明文。

攻击的可行性

首先,DES/3DES 是具有 64 位块大小的 SSL/TLS 里使用的唯一密码格式。如概述里所讨论的,包含 3DES 的密码组的优先级低于其他密码组(如 AES-128)。要实施对 64 位块密码的攻击,至少需要在连接上捕获 32GB 数据。对于 SSL/TLS,这意味着要在单个 SSL/TLS 会话里完成(对于所有新的会话,SSL/TLS 会重新协商对称密钥)。因此,长时间存在的 HTTPS 连接易受到攻击。在很多情况下,只恢复两个明文块间的 XOR 不足以实施攻击。然而,当满足下列条件时可能会导致攻击:
重复地发送固定的机密信息;
已知明文的部分内容。

学术论文里提及的概念攻击证据假定了在所有通讯中服务器和客户间都会传递验证令牌(令牌可以是用在基本验证里的凭证 cookie),然后攻击者会在被攻击的网站上运行一个恶意的 JavaScript。BEAST 类型的攻击会被用来抽取 cookie。

风险规避

SSL/TLS 配置应该首选 AES 而不是 DES。Red Hat Enterprise Linux 6 和 7 附带的 OpenSSL 版本已经这样做了。
在 Red Hat Enterprise Linux 5 附带的 OpenSSL 版本里,3DES 列在 AES-256 密码之下和 AES-128 之上,因此服务器上不应该禁用基于 AES-256 的密码组。
使用 OpenSSL 的服务器不应该禁用 AES-128 和 AES-256 密码组。Red Hat Enterprise Linux 附带的 Apache 版本使用默认的密码字符串,其中 AES 优先于基于 DES/3DES 的密码组。

解决方案

这个漏洞关系到 DES/3DES 密码的设计,所以不是实施方面的漏洞。
既然在默认的密码列表配置里,有几个高于 3DES 的更强的密码组,这个漏洞没有直接影响 Red Hat Enterprise Linux 5、6 和 7 的任何密码库(OpenSSL、NSS 和 GnuTLS)。
对于 Red Hat Enterprise Linux 5,请不要禁用服务器上基于 AES-256 的密码组。对于 Red Hat Enterprise Linux 6 和 7,请不要禁用服务器上基于 AES-128 或 AES-256 的密码组。

上游的安全修复:
OpenSSL:OpenSSL 已将其评级为 'low' 安全性问题。开发人员已在 1.0.2 分支里将 3DES 密码组从 HIGH 移至 MEDIUM 类别,以后的版本里还会在默认情况下禁用它。

NSS:Mozilla 在对所有密码组实施数据限制。

OpenSSL 修复了严重的 DoS 和证书验证漏洞

2021年3月下旬,OpenSSL 项目针对潜伏在 OpenSSL 产品中的两个高危漏洞 CVE-2021-3449 和 CVE-2021-3450 发布了公告。这两个漏洞包括:
CVE-2021-3449:由于 NULL 指针取消引用而导致的拒绝服务(DoS)漏洞,只影响 OpenSSL 服务器实例,而不影响客户端。
CVE-2021-3450:不正确的 CA 证书验证漏洞,同时影响服务器和客户端实例。

单行代码即可修复 DoS 漏洞

如果在重新协商的过程中,客户端发送了一个恶意的 ClientHello 消息,OpenSSL TLS 服务器中的 DoS 漏洞(CVE-2021-3449)就会导致服务器崩溃。公告指出,"如果 TLSv1.2 重新协商的 ClientHello 省略了 signature_algorithms 扩展(在初始的 ClientHello 中存在),但包含了 signature_algorithms_cert 扩展,那么就会导致 NULL 指针取消引用,从而导致崩溃和拒绝服务攻击"。

该漏洞只影响运行在 1.1.1 和 1.1.1j 版本之间(包括两者)且需要同时启用 TLSv1.2 和重新协商的 OpenSSL 服务器。然而,由于这是这些 OpenSSL 服务器版本的默认配置,许多活跃的服务器可能都存在这个潜在的漏洞,而 OpenSSL 客户端则不受该漏洞影响。幸运的是,修复这个 DoS 漏洞十分简单,只需要将 peer_sigalgslen 设置为 0 即可。


该漏洞由诺基亚的工程师 Peter Kästle 和 Samuel Sapalski 发现,他们也提供了上图所示的修复方法。

CA 证书漏洞

绕过 CA 证书验证的漏洞 CVE-2021-3450 则与 X509_V_FLAG_X509_STRICT 标志有关。

OpenSSL 使用此标志来禁止对损坏的证书使用替代方法,并严格要求根据 X509 规则对证书进行验证。然而,由于一个回归错误,OpenSSL 1.1.1h 及以上版本(但不包括修复后的 1.1.1k 版本)都会受到这个漏洞的影响,因为在这些版本中这个标志并没有被默认设置。该公告指出,"从 OpenSSL 1.1.1h 版本开始增加了一项检查,以禁止在链中显式编码 elliptic curve 参数的证书,这是附加的严格检查。但是,这项检查的实现中出现了一个错误,意味着之前确认链中证书是有效 CA 证书的检查结果被覆盖了"。目前上述这两个漏洞都不会影响 OpenSSL 1.0.2,并且这两个漏洞都在 OpenSSL 1.1.1k 中得到了修复,官方建议用户升级到这个版本以保护他们的实例。

OpenSSL 出现严重漏洞,可被用于改变应用数据

OpenSSL Project 于2021年8月末旬正式推出了 OpenSSL 1.1.1l,该版本修补了一个高严重性漏洞,该漏洞能够让攻击者改变应用程序的行为或导致应用程序崩溃。

该漏洞的 CVE ID 为 CVE-2021-3711,被描述为一个与 SM2 解密有关的缓冲区溢出漏洞。为了解密 SM2 加密的数据,应用程序通常会调用 API 函数 EVP_PKEY_decrypt()。一般情况下,一个应用程序将调用这个函数两次。第一次在进入时,"out" 参数可以是 NULL,而在退出时,"outlen" 参数填充了为容纳解密明文所需的缓冲区大小。然后,应用程序可以分配一个足够大的缓冲区,并再次调用 EVP_PKEY_decrypt(),但这次为 "out" 参数传递一个非 NULL 的值。

SM2 解密代码实现中的这个漏洞意味着第一次调用 EVP_PKEY_decrypt() 并计算出的容纳明文所需的缓冲区大小,可能要小于第二次调用时实际所需的大小。因此当应用程序第二次调用 E VP_PKEY_decrypt() 时,就可能导致缓冲区溢出。恶意攻击者如果能够向应用程序提供 SM2 内容进行解密,就能导致攻击者所选择的数据溢出缓冲区,最多可溢出 62 个字节,从而改变缓冲区后其他数据的内容。进一步改变应用程序行为或导致应用程序崩溃。

OpenSSL Project 的 Matt Caswell 解释说:"应用程序可能在内存中保存有任何一种数据(如财务数据、凭证等),如果攻击者能够改变它,那引起的后果不堪设想"。安全研究人员 John Ouyang 表示,这个安全漏洞影响 1.1.1 版本之前的 OpenSSL。除了上述这个高严重性漏洞以外,OpenSSL 还报告了一个 CVE ID 为 CVE-2021-3712 的中等程度漏洞,该漏洞可以被利用进行拒绝服务(DoS)攻击。这个问题也已经随着 1.1.1l 版本的发布得到了修复。截止到目前,今天已发现了五个与 OpenSSL 相关的漏洞,其中有两个被评为高严重性的漏洞。而在 2020 全年,OpenSSL 只发现了三个漏洞。

OpenSSL库曝新型无限循环安全漏洞可使远程服务器崩溃

2022年3月中旬消息,网络安全研究发现OpenSSL库再曝出重大安全漏洞,其维护者已经发布了补丁修复漏洞,该漏洞可以在解析证书时导致拒绝服务 (DoS) 攻击。根据网络安全行业门户「极牛网」的梳理,该漏洞号为 CVE-2022-0778(CVSS 评分:7.5),该漏洞源于使用无效的显式椭圆曲线参数解析格式错误的证书,从而导致所谓的无限循环漏洞。该漏洞存在于一个名为 BN_mod_sqrt() 的函数中,该函数用于计算模平方根。

由于证书解析发生在证书签名验证之前,因此任何解析外部提供的证书的过程都可能受到拒绝服务攻击,在解析精心制作的私钥时也可以达到无限循环,因为它们可以包含显式的椭圆曲线参数。虽然没有证据表明该漏洞已在野被利用,但在某些情况下它可能会被武器化,包括当 TLS 客户端或服务器从恶意服务器访问流氓证书时,或者当证书机构解析来自客户的认证请求时。

该漏洞影响 OpenSSL 的 1.0.2、1.1.1 和 3.0 版本,项目维护者通过发布针对付费客户的版本 1.0.2zd 以及 1.1.1n 和 3.0.2 修复了该漏洞。OpenSSL 1.1.0 虽然也受到影响,但由于该版本已不再维护,因此不会得到修复。该漏洞是自年初以来修复的第二个 OpenSSL 漏洞。2022年1月28日,维护人员修复了一个影响库的 MIPS32 和 MIPS64 平方过程的中等严重性缺陷(CVE-2021-4160 ,CVSS 评分:5.9)。

OpenSSL 发布 3.0.7 修复两个高危漏洞

OpenSSL 已于2022年11月上旬发布 3.0.7 修复两个高危漏洞:CVE-2022-3786 和 CVE-2022-3602。官方建议 OpenSSL 3.0.x 用户应升级到 OpenSSL 3.0.7,因为这两个漏洞影响 OpenSSL 3.0.0 至 3.0.6 版本,不影响 OpenSSL 1.1.1 和 1.0.2。OpenSSL 团队表示,目前尚未发现利用上述漏洞的案例。此外,由于 OpenSSL 不会跟踪项目的使用情况,所以也没有关于受影响的服务器的统计数据。只是建议用户升级到最新版本。

CVE-2022-3602 漏洞最初被 OpenSSL 团队评估为 "CRITICAL"(严重)等级 —— 因为可能会导致 RCE,但经过测试和评估,该漏洞在 2022 年 11 月 1 日被降级为 "HIGH"(高危)。
CVE-2022-3602:X.509 电子邮件地址 4 字节缓冲区溢出漏洞。

由于 OpenSSL 3.0.0 - 3.0.6 版本中在 X.509 证书验证中存在缓冲区溢出漏洞,可以通过制作恶意电子邮件地址以溢出堆栈上的 4 个字节,成功利用此漏洞可用于发起 Dos 攻击或远程代码执行。
CVE-2022-3786:X.509 电子邮件地址可变长度缓冲区溢出漏洞。

由于 OpenSSL 3.0.0 - 3.0.6 版本中在 X.509 证书验证中存在缓冲区溢出漏洞,可以通过在证书中制作恶意电子邮件地址以溢出堆栈中包含 "." 字符(十进制 46)的任意字节数,成功利用此漏洞可用于发起 DoS 攻击。



该文章最后由 阿炯 于 2022-11-02 21:13:49 更新,目前是第 2 版。