OpenSSH的漏洞使数百万台服务器面临风险

来自 Qualys 的研究人员称,regreSSHion 允许攻击者接管服务器,目前已发现 1400 万个存在潜在漏洞的 OpenSSH 实例。
新闻资讯 OpenSSH 漏洞
2024-07-04 21:50:03  |   作者:开源爱好者  |   来源:

OpenSSH的漏洞使数百万台服务器面临风险

来自 Qualys 的研究人员称,regreSSHion 允许攻击者接管服务器,目前已发现 1400 万个存在潜在漏洞的 OpenSSH 实例。
新闻资讯 OpenSSH 漏洞
2024-07-04 21:50:03
作者:开源爱好者
来源:

研究人员在Open Secure Shell (OpenSSH) 服务器中发现了一个严重的远程代码执行漏洞,该漏洞可能会使未经认证的攻击者获得服务器的 root shell 并接管服务器。利用 Shodan 和 Censys 等互联网扫描服务,Qualys 的研究人员发现了 1400 多万个暴露在互联网上的 OpenSSH 潜在漏洞实例。

图片1.jpg

这个被追踪为 CVE-2024-6387 的漏洞被称为 regreSSHion,因为它是 18 年前流行软件中一个旧漏洞(CVE-2006-5051)的回归。

发现该漏洞的 Qualys 研究人员表示:“在这种情况下,回归意味着一个曾经被修复的漏洞在随后的软件版本中再次出现,通常是由于更改或更新无意中重新引入了该问题。这一事件凸显了彻底回归测试在防止已知漏洞重新引入环境中的关键作用。这一回归是在 2020 年 10 月(OpenSSH 8.5p1)被引入的。”

OpenSSH (sshd) 是 SSH 协议最广泛的实现,用于 Linux 和 BSD 系统上的安全通信和远程访问,被部署在内部网络和互联网上的无数计算机上。

易受攻击的版本包括 4.4p1 之前的版本(如果它们缺少 CVE-2006-5051 和 CVE-2008-4109 缺陷的补丁)、8.5p1 之后的版本(当该缺陷被重新引入时)以及 7 月 1 日发布的 9.8p1 版本(当该缺陷被重新引入时)。

OpenSSH 信号处理器中的“竞态条件”

该漏洞源于 sshd 的 SIGALRM 处理程序。当尝试建立的连接在称为 LoginGraceTime 的宽限期内未能通过身份验证时,该处理程序会异步地调用如 syslog() 等各种敏感函数。

问题在于,攻击者可以通过开启多个连接而不提供身份验证凭据的方式,以异步方式触发 OpenSSH 的信号处理程序。然而,处理程序调用的这些函数在异步环境下调用并不安全,可能导致进程的内存进入不一致状态。

该漏洞在 2006 年首次被报告时,被描述为一种竞态条件,它可能导致拒绝服务(如进程崩溃),并存在执行任意代码的可能性,但后者从未被证实,因为这要求攻击者能够成功赢得竞态条件——即需要多次尝试才能成功。

Qualys 的研究人员发现,由于 OpenSSH 中用于抵御这一问题的函数中的一个关键组件被意外删除,该漏洞被重新激活。他们开始证明,尽管存在竞态条件的障碍,但远程代码执行仍然是可能的。事实上,他们的任务更加艰巨,因为自 2006 年以来,Linux 和其他操作系统已经引入了地址空间布局随机化(ASLR)等内存安全技术,以增加漏洞利用的难度。

研究人员在他们的技术咨询中写道:“从理论上讲,我们必须找到一条有用的代码路径,如果在正确的时间被 SIGALRM 中断,就会使 sshd 处于不一致的状态,然后我们必须在 SIGALRM 处理程序中利用这种不一致的状态。从实际角度来看,我们必须找到一种方法,在 sshd 中识别出这条有用的代码路径,并最大限度地提高在正确时间中断它的机会。从时间效率角度来看,我们必须探索一种策略,以进一步提高我们远程在正确时间中断这一有用代码路径的成功率。”

研究人员针对使用 glibc C 库的 Linux 系统和 32 位版本演示了漏洞利用,因为较小的内存空间导致地址空间布局随机化(ASLR)的效果较弱。不过,在 64 位系统上利用该漏洞也是可能的,但可能更加困难。

针对 Debian Linux i386 稳定版中的 OpenSSH 9.2p1,研究人员需要尝试约 1万次才能赢得竞态条件并利用该漏洞。这意味着在 100 个并发连接和 120 秒的默认登录宽限期(LoginGraceTime)条件下,整个过程需要 3-4 个小时。然而,由于 glibc 的 ASLR 地址只能在大约一半的时间内被正确猜测,因此实现远程代码执行并获取 root shell 的时间将增加到 6-8 小时。

OpenBSD 上的 OpenSSH 部署不会受到此攻击的影响,因为其信号处理器会调用 syslog_r(),这是 OpenBSD 在 2001 年开发的 syslog() 的线程安全版本,对异步调用是安全的。

如何缓解 OpenSSH regreSSHion 漏洞

强烈建议在 Linux 发行版的软件包库中提供 OpenSSH 的修补版本后,立即将其升级到该版本。Red Hat 指出,如果发行版不能立即提供已打补丁的软件包,另一种缓解方法是在 sshd 配置文件中将 LoginGraceTime 参数设置为 0。

此外,通过使用网络监控工具和防火墙,可以检测并阻止赢得这一竞态条件所需的大量连接尝试。该漏洞的利用难度也是其在 CVSS 等级中被评为 8.1(重要)而非更高(如关键)的原因之一。