black15801577901@home:~$

OpenSSH曝高危漏洞

OpenSSH 最近修复的两个高危漏洞分析

OpenSSH 是远程管理 Linux 和 BSD 系统的最常用工具。近期,OpenSSH 修复了两个高危漏洞。其中一个漏洞允许攻击者在特定配置下对 OpenSSH 客户端发起中间人攻击,冒充服务器以拦截敏感通信;另一个漏洞则可能导致 CPU 资源耗尽。

漏洞详情及潜在危害

研究人员在报告中指出:“SSH 会话是攻击者拦截凭证或劫持会话的主要目标。一旦被攻破,黑客可以查看或操纵敏感数据,横向跨越多个关键服务器,并窃取诸如数据库凭证等重要信息。此类泄露可能导致声誉受损、违反合规要求(如 GDPR、HIPAA、PCI-DSS),并通过迫使系统停机以遏制威胁,从而破坏关键业务。”

  • 中间人攻击漏洞:编号为 CVE-2025-26465,其代码缺陷可追溯至 2014 年 12 月,距今已有 10 年之久。该漏洞影响了从 6.8p1 到 9.9p1 的所有 OpenSSH 版本。
  • 资源耗尽漏洞:编号为 CVE-2025-26466,影响了 9.5p1 到 9.9p1 版本。

用户应尽快升级至新发布的 OpenSSH 9.9p2 版本。

DNS 密钥验证机制的失效

OpenSSH 是 SSH(安全外壳协议)最流行的实现,由维护 OpenBSD 操作系统的 OpenBSD 项目开发。OpenBSD 以其代码质量和安全性著称,OpenSSH 也不例外。

SSH 协议的工作方式

SSH 协议的工作方式是在交换凭证之前先建立加密连接。客户端通过查看服务器的公钥来验证其身份,类似于 TLS 协议。如果密钥已被信任,握手将继续;如果密钥指纹与客户端 known_hosts 文件中存储的不一致,客户端会发出中间人攻击的警告。

known_hosts 文件

known_hosts 文件中的服务器身份是如何填充的?通常,当客户端首次连接服务器时,系统会提示用户是否接受并信任服务器提供的密钥,从而在本地创建记录。然而,并非所有 SSH 用户都是人类,SSH 还通过自动化脚本进行大量机器与机器之间的交互。

为了支持这些自动化脚本信任新配置的服务器,OpenSSH 提供了一个名为 VerifyHostKeyDNS 的功能,允许客户端通过检查服务器密钥是否与其主机名的 SSHFP DNS 记录匹配来自动信任该密钥。

漏洞成因与利用场景

VerifyHostKeyDNS 功能在大多数部署中默认关闭,但用户可以在配置中启用它。2013 年 9 月至 2023 年 3 月期间,FreeBSD 附带的 OpenSSH 包默认启用了该选项。

Qualys 研究人员发现,当 VerifyHostKeyDNS 启用并设置为“ask”或“yes”时,检查服务器密钥的函数存在逻辑错误:除 -1SSH_ERR_INTERNAL_ERROR)之外的任何错误值都不会被视为错误,反而被认为是成功的。通过尝试不同的错误代码,他们发现只有 -2SSH_ERR_ALLOC_FAIL,内存不足错误)可以被利用。

配合漏洞实现攻击

在真实场景中,如何触发客户端的内存错误?一种方法是在伪造的服务器上放置一个超长的密钥,但由于握手期间交换的数据包最大约为 256KB,这不足以耗尽客户端内存。因此,研究人员需要另一个漏洞,在身份验证之前触发,并尽可能消耗客户端进程的内存,以便在提供伪造服务器密钥时触发内存不足错误。

最终,研究人员发现了第二个漏洞 CVE-2025-26466,该漏洞在初始密钥交换期间会导致内存的无限分配,直到交换结束才释放。虽然该漏洞可能导致客户端和服务器的拒绝服务,但在客户端上,它还可用于为利用第一个漏洞创造条件,从而实现中间人攻击。

概念验证

研究人员在概念验证场景中解释道:“如果伪造的服务器实施上述内存耗尽攻击(通过分配 1024 位 RSA 密钥、约 140KB 的证书扩展以及约 234MB 的 PONG 数据包),则客户端调用 sshkey_from_private() 时返回 SSH_ERR_ALLOC_FAIL,从而完全绕过对真实服务器主机密钥的检查,使得伪造的服务器能够成功冒充真实服务器。”