CVE-2024-5535
SSL_select_next_proto 缓冲区越界读取
- 已发布
- 2024年6月27日
- 已更新
- 2026年5月12日
- 分配 CNA
- openssl
- 观察到的证据
- 2026年8月5日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H低 · 未来 30 天
- 百分位
- 92.6%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
问题摘要:调用 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` 参数),则应用程序不会受到此问题的影响。如果应用程序意外配置了零长度服务器列表,并意外将该零长度服务器列表传入 `client`/`client_len` 参数,且未能正确处理“无重叠”响应(在 ALPN 中通常会导致握手失败),则它将容易受到此问题的影响。在 NPN 的情况下,该协议允许客户端在无重叠时机会性地选择协议。OpenSSL 在无重叠情况下返回第一个客户端协议以支持此功能。客户端协议列表来自应用程序,通常不应预期其长度为零。然而,如果 `SSL_select_next_proto` 函数意外以 `client_len` 为 0 调用,则将返回无效的内存指针。如果应用程序将此输出用作机会性协议,则会发生机密性丧失。此问题被评估为低严重性,因为应用程序最可能在使用 NPN 而非 ALPN 时受到影响——但 NPN 并未被广泛使用。此外,它还需要应用程序配置或编程错误。最后,此问题通常不受攻击者控制,使得主动利用不太可能发生。3.3、3.2、3.1 和 3.0 中的 FIPS 模块不受此问题影响。由于此问题严重性较低,我们目前不会发布新的 OpenSSL 版本。修复将包含在后续可用版本中。
来源
1PoC - OpenSSL NPN 缓冲区过度读取
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。