SpookySSL CVE-2022-3602 SSLv3 扫描器,适用于 Windows、Linux、macOS
首先,问题出现在确定字节大小时。如果你注意的话,在确定字节大小时没有定义 NULL(即空/零值),这样字节长度可以被设置为零。下面命令中以 xn-- 开头的部分直接表示将不同字母表(例如从中文通过 punycode 转换而来)中写的域名转换为拉丁字母。在 if 循环中,memcpy 命令在内存中分配一个 delta + 1 大小的栈空间,并将 outptr 值写入该空间。当输入 NULL 值时,由于只分配了 1 字节空间,两个空字符导致缓冲区溢出。
详细信息请参见:https://github.com/openssl/openssl/commit/c42165b5706e42f67ef8ef4c351a9a4c5d21639a
首先,我们需了解远程代码执行(RCE)
远程代码执行(RCE)攻击允许攻击者在计算机上远程执行恶意代码。RCE 漏洞的影响范围从恶意软件执行到攻击者完全控制受感染的机器。
OpenSSL 中的 CVE-2022-3602 漏洞是由于在检查 X.509 证书时对 Punycode 处理不当导致的。
Punycode 是使用有限 ASCII 字符子集表示 Unicode 字符串的一种方式。通常用于编码包含非 ASCII 字符(例如日语字母)的域名。Punycode 编码的字符串以“xn--”开头,后跟英文字符和数字。
有漏洞的函数 ossl_punycode_decode 在解码 Punycode 字符串时可能导致缓冲区溢出。当 OpenSSL 处理证书链时会被调用。要利用该漏洞,需要:
1) 构造一个包含“nameConstraints”字段的 CA(证书颁发机构)证书或中间证书,其中包含恶意的 Punycode 字符串。该 Punycode 字符串必须至少包含 512 字节(不包括“xn--”)。
2) 构造一个叶子证书,其中包含 SubjectAlternateName(SAN)的 otherName 字段,指定一个 SmtpUTF8Mailbox 字符串。
拒绝服务(DoS)漏洞
拒绝服务(DoS)攻击是一种旨在使机器或网络瘫痪、使其合法用户无法访问的攻击。DoS 攻击通过向目标发送大量流量或触发崩溃的信息来实现。
CVE-2022-3602 漏洞与其他缓冲区溢出漏洞一样也包含拒绝服务漏洞。缓冲区溢出发生在有漏洞的函数 ossl_a2ulabel 中。当该函数遇到一个后跟点号(“.”)的 Punycode 部分时,即使输出缓冲区已经溢出,它也会将“.”附加到输出缓冲区中。
这样,攻击者可以通过任意数量的“.”字符溢出输出缓冲区,导致栈损坏。该漏洞无法用于远程代码执行,仅能造成拒绝服务。
来源:https://blog.checkpoint.com/2022/11/01/openssl-vulnerability-cve-2022-3602-remote-code-execution-and-cve-2022-3786-denial-of-service-check-point-research-update/
