OpenSSL 3.0.7补丁深度解析:CVE-2022-3602与CVE-2022-3786漏洞技术细节与应对策略

本文详细解析OpenSSL 3.0.7版本中修复的两个高危缓冲区溢出漏洞CVE-2022-3602和CVE-2022-3786的技术细节、影响范围、检测方法及修复建议,帮助开发者与安全人员全面应对相关安全风险。

OpenSSL 3.0.7补丁全面解析(CVE-2022-3602 & CVE-2022-3786)

作者:Marcus Hutchins
讨论线程: https://updatedsecurity.com/topic/9-openssl-vulnerability-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.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。文件名有时可能包含版本号,但并非总是如此。最佳方法是通过字符串和正则表达式组合从文件内容中提取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-like:

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 设计