OpenSSHGSSAPI漏洞允许攻击者使SSH子进程崩溃

admin 2026-03-18 23:09:03 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: OpenSSHGSSAPI密钥交换补丁曝出CVE-2026-3497漏洞,因错误调用非终止函数致读取未初始化变量引发堆损坏。攻击者无需凭证即可构造数据包致SSH子进程崩溃,甚至违反权限分离边界。Ubuntu和Debian等受影响,建议立即更新补丁或禁用GSSAPIKeyExchange功能。 综合评分: 90 文章分类: 漏洞分析,漏洞预警,应用安全


cover_image

OpenSSH GSSAPI漏洞允许攻击者使SSH子进程崩溃

原创

网络安全9527 网络安全9527

安全圈的那点事儿

2026年3月13日 12:09 北京

许多 Linux 发行版在其 OpenSSH 软件包之上应用了 GSSAPI 密钥交换补丁中的一个重大漏洞。

该漏洞编号为 CVE-2026-3497,由安全研究员 Jeremy Brown 发现。攻击者只需精心构造一个网络数据包,即可可靠地使 SSH 子进程崩溃,并可能违反权限分离边界。

kexgsss.c该漏洞源于服务器端 GSSAPI 密钥交换处理程序内部的一行代码缺陷。sshpkt_disconnect()在默认错误处理情况下,使用了非终止函数,而实际上预期的是进程终止ssh_packet_disconnect()

因为sshpkt_disconnect()只将断开连接消息排队并返回,而不是停止执行,所以错误处理程序会跳转到读取名为 的未初始化堆栈变量的代码recv_tok

OpenSSH GSSAPI 漏洞

然后,该变量的内容通过 IPC 发送到特权监视器进程,并传递给gss_release_buffer(),该进程可能会调用free()垃圾指针,从而导致确认的堆损坏。

Brown 的分析将该漏洞归类为 CWE-824(访问未初始化的指针)和 CWE-908(使用未初始化的资源)。主要影响细节包括:

  • 只需一个精心构造的、大约 300 字节的 SSH 数据包即可触发此漏洞——无需任何凭证。
  • 在 x86_64 系统上,利用此漏洞会产生 SIGABRT(信号 6)或 SIGSEGV(信号 11)信号,并导致 SSH 连接锁定 90 秒。
  • 在测试配置中,子进程崩溃的可靠性为 100%。
  • 通过 privsep IPC 通道,最多可以向根级监控进程传输 127KB 的堆数据,这严重违反了权限分离边界。

由于编译器选项和优化标志的不同,各发行版中漏洞的严重程度差异很大。使用 -O0 选项编译的 Clang 会留下一个长度为 4 字节、值为 0xfffbe600 的指针,而使用 -O2 -fno-stack-protector 选项编译的 GCC 则会留下一个长度为 127,344 字节的有效堆地址。

一个包含八个构建的测试矩阵证实,其recv_tok.value范围可以从 NULL 到堆栈地址、堆地址,或者完全未映射的内存区域。

已确认运行 Ubuntu 和 Debian OpenSSH 服务器且启用了相关功能的系统GSSAPIKeyExchange yes可能受到影响。由于 Linux 生态系统中流传着多个不同版本的 GSSAPI KEX 补丁,因此受影响的范围可能远不止这两个发行版。

解决方法很简单:在 kexgsss.c 文件中服务器端调用的位置,将所有三个 sshpkt_disconnect() 实例替换为 ssh_packet_disconnect() 。Ubuntu 已经准备了一个补丁来解决此问题。

运行启用了 GSSAPI 密钥交换的OpenSSH 的管理员GSSAPIKeyExchange应立即应用可用的发行版更新,或者暂时禁用该功能以缓解问题。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全圈的那点事儿 网络安全9527 网络安全9527《OpenSSH GSSAPI漏洞允许攻击者使SSH子进程崩溃》

评论:0   参与:  0