CVE-2024-5535 in OpenSSL信息

摘要

由 VulDB • 2026-06-22

问题摘要:调用 OpenSSL API 函数 SSL_select_next_proto 时,如果提供的受支持客户端协议缓冲区为空,可能会导致崩溃或将内存内容发送给对等方。

影响摘要:缓冲区越界读取可能导致多种潜在后果,例如应用程序行为异常或崩溃。具体而言,此问题可能导致多达 255 字节的任意私有内存数据被发送给对等方,从而导致机密性丧失。然而,只有那些直接以长度为 0 的受支持客户端协议列表调用 SSL_select_next_proto 函数的应用程序才会受到此问题的影响。这通常不是一个有效的场景,通常也不在攻击者的控制之下,但可能由于调用应用程序中的配置或编程错误而偶然发生。

OpenSSL API 函数 SSL_select_next_proto 通常由支持 ALPN(应用层协议协商)或 NPN(下一协议协商)的 TLS 应用程序使用。NPN 较旧,从未标准化,且已被 ALPN 取代。我们认为 ALPN 的部署范围远大于 NPN。SSL_select_next_proto 函数接受来自服务器的协议列表和来自客户端的协议列表,并返回服务器列表中同时出现在客户端列表中的第一个协议。如果两个列表之间没有重叠,则返回客户端列表中的第一项。无论哪种情况,它都会指示是否找到了两个列表之间的重叠。当以零长度的客户端列表调用 SSL_select_next_proto 时,它未能注意到这一条件,并返回客户端列表指针后面的内存(并报告列表中没有重叠)。

该函数通常从 ALPN 的服务器端应用程序回调或 NPN 的客户端应用程序回调中调用。在 ALPN 的情况下,libssl 保证由客户端提供的协议列表长度永远不会为零。服务器协议列表来自应用程序,通常不应期望其长度为零。在这种情况下,如果 SSL_select_next_proto 函数已按预期调用(将客户端提供的列表传入 client/client_len 参数),则应用程序不会受到此问题的影响。如果应用程序意外配置了长度为 0 的服务器列表,并且意外地将该长度为 0 的服务器列表传入 client/client_len 参数,并且未能正确处理“无重叠”响应(在 ALPN 中通常会导致握手失败),那么它将容易受到此问题的影响。

在 NPN 的情况下,协议允许在没有重叠时客户端选择性地选择协议。OpenSSL 在无重叠情况下返回第一个客户端协议以支持此功能。客户端协议列表来自应用程序,通常不应期望其长度为零。但是,如果意外以 client_len 为 0 调用 SSL_select_next_proto 函数,则会返回无效的内存指针。如果应用程序将此输出用作选择性协议,则会发生机密性丧失。

此问题被评估为低严重性,因为应用程序最有可能在使用 NPN 而不是 ALPN 时容易受到攻击——但 NPN 并不广泛使用。它还要求应用程序存在配置或编程错误。最后,此问题通常不在攻击者的控制之下,因此主动利用不太可能。

3.3、3.2、3.1 和 3.0 中的 FIPS 模块不受此问题影响。

由于此问题的严重性较低,我们目前不发布 OpenSSL 的新版本。修复程序将在下一个版本发布时包含在内。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

来源

Do you know our Splunk app?

Download it now for free!