OpenSSL 3.0.7补丁深度解析:X.509证书验证漏洞与修复指南

本文详细解析OpenSSL 3.0.7补丁修复的两个X.509证书验证漏洞(CVE-2022-3602和CVE-2022-3786),包括漏洞技术细节、影响范围、检测方法和修复建议,帮助用户及时防范安全风险。

漏洞详情

来自 https://www.openssl.org/news/secadv/20221101.txt

X.509电子邮件地址4字节缓冲区溢出 (CVE-2022-3602)

严重程度:高

在X.509证书验证过程中,特别是在名称约束检查时可能触发缓冲区溢出。需要注意的是,这种情况发生在证书链签名验证之后,并且需要CA签署了恶意证书,或者应用程序在无法构建到可信颁发者的路径时仍继续证书验证。

攻击者可以制作恶意电子邮件地址来溢出堆栈上的四个攻击者控制的字节。此缓冲区溢出可能导致崩溃(造成拒绝服务)或潜在的远程代码执行。

许多平台实施了堆栈溢出保护措施,可以减轻远程代码执行的风险。对于任何给定的平台/编译器,基于堆栈布局可能会进一步降低风险。

CVE-2022-3602的预公告将此问题描述为"严重"。基于上述缓解因素的进一步分析导致其被降级为"高"。仍鼓励用户尽快升级到新版本。

在TLS客户端中,可以通过连接到恶意服务器来触发此漏洞。在TLS服务器中,如果服务器请求客户端身份验证并且恶意客户端连接,则可能触发此漏洞。

OpenSSL 3.0.0至3.0.6版本受此问题影响。OpenSSL 3.0用户应升级到OpenSSL 3.0.7。OpenSSL 1.1.1和1.0.2不受此问题影响。

此问题由Polar Bear于2022年10月17日向OpenSSL报告。修复由Paul Dale博士开发。

我们不知道任何可导致代码执行的有效利用程序,并且截至本公告发布时(2022年11月1日),我们没有证据表明此问题已被利用。

X.509电子邮件地址可变长度缓冲区溢出 (CVE-2022-3786)

该漏洞是X.509证书验证中的缓冲区溢出,这是用于验证TLS证书的代码。该漏洞可能被利用,通过恶意TLS证书允许远程代码执行;但是,它要求恶意TLS证书由受信任的CA签名。

由于证书验证通常在客户端进行,此漏洞主要影响客户端而非服务器。在某些情况下,服务器可能通过TLS客户端身份验证被利用,这可能会绕过CA签名要求,因为客户端证书通常不需要由受信任的CA签名。由于客户端身份验证很少见,并且大多数服务器未启用它,服务器利用的风险应该很低。

攻击者可以通过将客户端定向到使用特制证书触发漏洞的恶意TLS服务器来利用此漏洞。

利用可能性

鉴于该漏洞主要是客户端,要求恶意证书由受信任的CA签名(或用户忽略警告),并且利用复杂,我估计在野外看到利用的可能性很低。

受影响系统

重要说明:OpenSSL 3与SSLv3不同。此漏洞仅存在于OpenSSL版本3中,而不存在于SSLv3中。

该漏洞仅影响OpenSSL 3.0.0至3.0.6版本,补丁在3.0.7版本中提供。由于OpenSSL 3.0.0于2021年9月发布,其普及程度远低于先前版本。考虑到非常近的发布日期,具有硬编码OpenSSL版本的旧设备不太可能易受攻击。

NCSC-NL在此处提供了已确认受影响/未受影响软件的有用列表:https://github.com/NCSC-NL/OpenSSL-2022/tree/main/software

检测OpenSSL版本

系统有多种使用OpenSSL的方式;我将在下面解释每种方式及具体补救措施。

系统

系统可能安装了OpenSSL,可以通过运行命令’openssl’执行 如何检查版本:运行命令:‘openssl version’(不带引号)

动态链接

大多数软件将包含在库中的OpenSSL代码(Windows上的DLL文件,或Linux上的SO文件)。

如何检查版本:OpenSSL库通常在Linux上命名为libcrypto.so或libssl.so,在Windows上命名为libcrypto.dll或libssl.dll。文件名有时可能包含末尾的版本号,但情况并非总是如此。最好的方法是通过字符串和RegEx组合从文件内容中提取OpenSSL版本号。

下面我附上了Linux和Windows的示例版本扫描程序。请注意,这些仅是示例脚本,不设计用于生产环境。请谨慎使用,请注意它们不能100%保证找到服务器上的每个OpenSSL库。

Linux和*Nix扫描程序(Bash脚本):https://github.com/MalwareTech/SpookySSLTools/blob/main/openssl_scan.sh Windows扫描程序(PowerShell):https://github.com/MalwareTech/SpookySSLTools/blob/main/openssl_scan.ps1

静态链接软件

有时软件的构建方式使得所有库(通常是DLL或SO)文件都简单地编译到主软件可执行文件中。这是最坏的情况,也最难处理。

如何检测:使用类似于上述脚本的方法,但针对可执行文件而不是库。

类Unix系统:

1
strings /path/to/executable | grep "^OpenSSL\s*[0-9].[0-9].[0-9]"

Windows:

1
select-string -Path C:\path\to\executable.exe -Pattern "OpenSSL\s*[0-9].[0-9].[0-9]" -AllMatches | % { $_.Matches } | % { $_.Value }

当前利用状态

概念验证:此漏洞尚无确认的概念验证可用 利用:此漏洞尚无确认的野外利用 漏洞致谢:Polar Bear (SandboxEscaper)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计