标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2025-3201] 作者: 小螺号 发表于: [2022-11-03]
本文共 [617] 位读者顶过
一、漏洞概况近日,捕获到 OpenSSL 缓冲区溢出漏洞(CVE-2022-3602)相关情报,攻击者可以利用该漏洞造成缓冲区溢出, 可能造成远程代码执行。OpenSSL 是一个强大的、商业级的、功能齐全的工具包,用于通用加密和安全通信。当应用程序验证不受信任的 X.509 证书(包括 TLS 证书)时, 可能被攻击者利用此漏洞, 该漏洞已经在 OpenSSL 3.0.7 版本被修复。 漏洞复现: [出自:jiwo.org]![]() 此次受影响版本如下: ![]() 二、漏洞评估公开程度:已出现 PoC 利用条件:无权限要求 交互要求:0 click 漏洞 危害:高危 影响范围:OpenSSL 3.0.0 - 3.0.6 三、漏洞分析该漏洞存在于 ossl_punycode_decode 函数当中, 该函数主要提供 punycode 域名解码的功能, 当客户端或服务器配置为验证 X.509 证书时会调用此函数。因此攻击者可以通过在电子邮件地址字段的域中创建包含 punycode 的特制证书来利用该漏洞。 在 ossl_punycode_decode 函数中, 主要是因为循环终止条件没有处理好, 导致了最终在往栈上 buffer 写数据的时候多写了 4 字节的数据, 导致覆盖到了 buffer 后面的内容: 补丁前: ![]() 补丁后: ![]() 在 Windows 平台上面溢出的字节会导致程序崩溃, 这是因为栈上面的 stack cookies 被覆盖导致程序的安全机制验证不通过, 导致崩溃。 覆盖前: ![]() 覆盖后: ![]() 可以看到 buffer 往后多写了 4 字节, 修改了 buffer 后面的内容; 但是在 Linux 平台上面触发漏洞确不会发生崩溃, 这是因为虽然溢出发生了, 但是Linux 栈上面的 canary 并没有被修改并且没有数据结构被破坏。 覆盖前: ![]() 覆盖后: ![]() 可以看到在 canary 之前仍然有 8 字节的空间, 没有覆盖到 canary, 而覆盖的数据只是一个没有初始化的变量, 并没有影响到程序的执行流程, 所以程序不会崩溃。 ![]() 四、修复方案1、 对于自主编译使用 OpenSSL 的用户,且 OpenSSL 版本为 3.0.0 - 3.0.6 ,请尽快升级至 3.0.7。 参考链接: https://www.openssl.org/source/ 2、 对于应用程序中使用了 OpenSSL 的用户,请检查相关库的版本,并联系应用厂商进行更新。 |