OpenSSL 3缓冲区溢出漏洞深度解析:CVE-2022-3786与CVE-2022-3602

本文详细分析了OpenSSL 3.0.x版本中的两个缓冲区溢出漏洞CVE-2022-3786和CVE-2022-3602,涵盖技术细节、影响范围、利用条件及修复方案,帮助读者全面理解漏洞机制与防护措施。

OpenSSL 3缓冲区溢出漏洞:CVE-2022-3786和CVE-2022-3602

注意:本公告由Kudelski Security的威胁检测与研究团队贡献,特别感谢Mark Stueck。

执行摘要

10月25日,OpenSSL项目宣布即将发布OpenSSL 3.0.7版本,该版本将修复先前OpenSSL 3.0.x版本中的一个关键严重性漏洞。11月1日,两个漏洞被披露:CVE-2022-3786和CVE-2022-3602,它们描述了punycode解码函数中的两个缓冲区溢出。在公告发布后,基于安全研究人员进行的额外测试和调查反馈,CVE-2022-3602被降级为高严重性。

主要的高严重性漏洞(分配为CVE-2022-3602)存在于OpenSSL 3.0.x在名称约束检查期间解码证书中包含的电子邮件地址的方式中。在OpenSSL 3中,这发生在证书链验证之后。因此,成功的攻击要求攻击者能够访问由公开信任的证书颁发机构(CA)或受害者明确信任的证书颁发机构(如自签名证书或由私有CA签名的证书)签名的恶意证书。

此外,成功利用此漏洞进行远程代码执行(RCE)需要攻击者绕过操作系统内置的内存保护,如地址空间层随机化(ASLR)、不可执行内存保护等。虽然这是可能的,但创建可靠的漏洞利用需要针对特定的操作系统版本或软件设备。因此,CFC强烈建议组织及时为受影响系统应用补丁,但目前这不是需要24/7修复工作的关键情况。

截至本文撰写时,Kudelski Security的Fusion Premise Equipment(FPE)设备不易受CVE-2022-3786或CVE-2022-3602影响。

受影响组件

该漏洞仅影响OpenSSL版本3.0.0至3.0.6。版本1.1.1和1.0.2不受影响。在撰写本文时,一些受影响的操作系统包括Debian 12、Ubuntu Linux 22.04(Jammy)、Ubuntu Linux 22.10(Kinetic)、Linux Mint 21(Vanessa)以及几个近期版本的Fedora Linux(36、36、Rawhide和EPEL版本7和8)。

由于可能受影响软件列表的快速变化性质,Kudelski Security强烈建议组织查看由荷兰国家网络安全中心(NCSC-NL)维护并由社区成员贡献的以下Github仓库: https://github.com/NCSC-NL/OpenSSL-2022/tree/main/software

此外,Docker发布了一个工具,用于搜索包含易受攻击版本OpenSSL的Docker和容器镜像。

技术细节

问题在于OpenSSL的punycode解码函数中的两个缓冲区溢出。修复问题的提交可在此处和此处找到。

Punycode是一种用仅ASCII字符集表示Unicode字符的方法。OpenSSL使用它来表示包含Unicode字符的域。例如,Unicode字符串“öpenssl 💣”将在punycode中转换为“xn—penssl -80a47326i”。

限制证书颁发机构(CA)范围的一种方法是使用名称约束。名称约束允许限制颁发证书的域名。漏洞出现在解析名称约束的电子邮件字段时。电子邮件可以包含puny编码值,而OpenSSL 3.0.x中实现的解析器错误地解码它们。缓冲区长度未正确检查,攻击者控制的4字节可能溢出缓冲区。

第二个漏洞(CVE-2022-3786)可以被攻击者通过使用恶意电子邮件地址触发拒绝服务,通过缓冲区溢出攻击。然而,与CVE-2022-3602不同,攻击者只能操纵缓冲区的长度,而不是内容。

注意:在这两种情况下,利用发生在证书链签名验证之后,这意味着CA或中间证书需要包含恶意负载,并且必须签名叶证书以促进成功利用。

Colm MacCárthaigh迅速发布了CVE-2022-3602的概念验证代码,允许玩转漏洞并解释细节。

在针对非易受攻击的OpenSSL版本运行代码时,应显示以下输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Certificate request self-signature ok
subject=C=US, ST=WA, L=Seattle, O=PunyCode Corp, OU=PunyCode Dept, CN=www.example.com
test case 0 ... ok
test case 1 ... ok
test case 2 ... ok
test case 3 ... ok
test case 4 ... ok
test case 5 ... ok
test case 6 ... ok
test case 7 ... ok
test case 8 ... ok
test case 9 ... ok
test case 10 ... ok
ctrl-c when ready

然而,针对易受攻击的OpenSSL版本(如3.0.6)运行代码返回以下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Certificate request self-signature ok
subject=C=US, ST=WA, L=Seattle, O=PunyCode Corp, OU=PunyCode Dept, CN=www.example.com
test case 0 ... possibly vulnerable
test case 1 ... possibly vulnerable
test case 2 ... possibly vulnerable
test case 3 ... possibly vulnerable
test case 4 ... possibly vulnerable
test case 5 ... possibly vulnerable
test case 6 ... possibly vulnerable
test case 7 ... possibly vulnerable
test case 8 ... possibly vulnerable
test case 9 ... possibly vulnerable
test case 10 ... possibly vulnerable
ctrl-c when ready

Datadog Security实验室发布了针对Windows版本OpenSSL的另一个概念验证。针对复制的Linux环境运行了第二个场景,由于几个低级技术因素,导致利用可能性的中等置信度评级。

解决方案

尽管漏洞从“关键”严重性降级为高严重性,仍然有必要纠正问题。因此,CFC强烈建议组织及时为受影响系统应用补丁,但目前这不是需要24/7修复工作的关键情况。解决方案是尽可能更新到OpenSSL版本3.0.7。作为我们内部补丁验证过程的一部分,Kudelski Security的内部团队制定了以下决策图:

[决策图内容未提供原文,故不翻译]

网络融合中心正在做什么

CFC已努力验证,在本文撰写时,Fusion Premise Equipment(FPE)不易受CVE-2022-3786或CVE-2022-3602影响。

此外,CFC正在与我们的供应商合作伙伴合作,识别可能易受攻击的系统,这些系统应由CFC的安全设备管理(SDM团队)打补丁。CFC将向客户提供关于可能易受攻击的系统和补丁计划的更新,因为我们的供应商合作伙伴验证了它们对这些OpenSSL漏洞的整体暴露。

结论

利用CVE-2022-3602和CVE-2022-3786可能导致RCE或DoS攻击。然而,环境中的几个因素和条件必须为真才能使这成为可能。此外,这些因环境而异,表明成功利用广泛系统需要复杂和精密的技术。

例如,由于常见的缓冲区溢出保护,如ASLR、NX堆栈、堆栈cookie、SafeSEH和平台特定保护,缓冲区溢出攻击通常越来越难以成功执行。此外,攻击进展可能还需要额外技术,如堆喷雾攻击,这减少了微妙性并增加了检测可能性,以有效操纵未分配内存。

此外,成功的拒绝服务依赖于在ossl_a2ulabel函数中找到的特定堆栈布局。本质上,利用条件因特定因素(如编译器优化设置和堆栈cookie是否禁用)而有很大差异。

在这两种情况下,强烈建议打补丁到OpenSSL版本3.0.7。最后,查看当前缓冲区溢出保护,如果不确定,请联系Kudelski Security获取最佳实践和指南。

来源

Baguelin, F., Fox, J., Frichette, N., Salem, E. (2022年11月1日). The OpenSSL punycode vulnerability (CVE-2022-3602): Overview, detection, exploitation, and remediation. DATADOG Security Labs | Emerging Threats Blog. https://securitylabs.datadoghq.com/articles/openssl-november-1-vulnerabilities/

Farrell, N. (2022年11月1日). OpenSSL flaw should be patched today. FudZilla. https://www.fudzilla.com/news/55751-openssl-flaw-should-be-patched-today

OpenSSL Security Advisory. (2022年11月1日). OpenSSL Project. https://www.openssl.org/news/secadv/20221101.txt

SentinelOne. (2022年11月1日). OpenSSL 3 Critical Vulnerability | What Do Organizations Need To Do Now? SentinelOne. https://www.sentinelone.com/blog/openssl-3-critical-vulnerabililty-what-do-organizations-need-to-do-now/

Ullrich, J. B. Upcoming Critical OpenSSL Vulnerability: What will be Affected? SANS Institute – Internet Storm Center. https://isc.sans.edu/forums/diary/Upcoming+Critical+OpenSSL+Vulnerability+What+will+be+Affected/29192

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