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:
|
|
Windows:
|
|
当前利用状态
概念验证: 目前尚无此漏洞的确认概念验证
利用情况: 目前尚无确认的野外利用
漏洞致谢: Polar Bear (SandboxEscaper)