OpenSSH服务器远程代码执行漏洞(CVE-2024-6387) - regreSSHion
2024年7月3日更新
摘要
发现OpenSSH服务器(sshd)中存在一个严重漏洞(CVE-2024-6387),命名为regreSSHion。该漏洞源于信号处理程序中的竞争条件,当客户端在指定时间(LoginGraceTime)内未能完成认证时触发,可能导致远程代码执行(RCE)。此漏洞在2020年10月被无意中重新引入,影响基于glibc的Linux系统上8.5p1至9.7p1版本的OpenSSH。未经认证的攻击者可远程利用此漏洞,可能以root权限执行任意代码。
受影响系统和应用
易受攻击版本:
- OpenSSH < 4.4p1(若未针对CVE-2006-5051或CVE-2008-4109打补丁)
- 8.5p1 <= OpenSSH < 9.8p1(因信号处理程序中关键安全检查被意外移除)
不受影响版本:
- 4.4p1 <= OpenSSH < 8.4p1(受"#ifdef DO_LOG_SAFE_IN_SIGHAND"指令保护)
- OpenBSD版本(使用异步信号安全的syslog_r())
技术细节/攻击概述
当客户端未在LoginGraceTime期限内完成认证时,sshd的SIGALRM处理程序会被异步调用。该处理程序调用了非异步信号安全的syslog()函数,导致竞争条件。攻击者可利用此条件在sshd特权代码中实现远程代码执行。
漏洞利用涉及三个主要版本的OpenSSH在不同Debian和Ubuntu系统上的表现。已成功在启用ASLR的32位Linux/glibc系统上演示利用。实验室条件下,攻击平均需要6-8小时的持续连接尝试(达到服务器接受的最大连接数)。
-
SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-1.woody.3 (Debian 3.0r6, 2005)
- 理论:针对sshd公钥解析代码中的free()调用,导致堆损坏
- 实践:约需10,000次尝试,平均约1周获得远程root shell
-
SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3 (Ubuntu 6.06.1, 2006)
- 理论:聚焦SIGALRM处理程序中的pam_start(),使PAM结构不一致,然后在pam_end()调用时利用此状态
- 实践:约需10,000次尝试,平均1-2天获得远程root shell
-
SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2 (Debian 12.5.0, 2024)
- 理论:利用SIGALRM处理程序中syslog()的malloc()调用
- 实践:约需10,000次尝试,平均6-8小时获得远程root shell
临时解决方案
SSHD代码修改 可直接修改代码,在sshsigdie()函数中添加C预处理器指令以避免调用不安全函数。但请注意这些修改可能有副作用且未经充分测试,CFC建议直接更新SSH版本。
SSH配置加固
在sshd_config
中调整以下设置以降低攻击有效性:
-
LoginGraceTime
- 设置为0:通过消除认证超时期来防止漏洞
- 注意:此设置可能占用系统资源,因为它移除了认证尝试的超时限制
-
MaxStartups
- 设置为较小数值:限制未认证连接数
- 注意:设置过低可能阻止合法用户,特别是在攻击激烈或主机用户数多时
-
PerSourceMaxStartups
- 设置为较小数值:限制单个源IP的并发未认证连接
- 注意:设置过低可能阻止合法用户
实施这些配置可增强SSH服务器安全性,但会使sshd面临因耗尽所有连接而导致的拒绝服务风险,同时消除远程代码执行风险。
建议
针对OpenSSH中允许Linux系统远程代码执行的regreSSHion漏洞,需要采取战略性和多层次的安全措施:
- 补丁管理:立即应用可用的OpenSSH补丁,并优先考虑定期更新
- 增强访问控制:使用基于网络的控制限制SSH访问,减少攻击面
- 网络分段和入侵检测:分段网络以防止对关键系统的未授权访问和横向移动,部署入侵检测系统监控和警报利用尝试的可疑活动
CFC行动
Kudelski Security在撰写本文时未观察到或收到这些漏洞被主动利用的迹象。CFC将持续监控情况,必要时发布咨询更新。具有漏洞扫描服务的客户将在扫描提供商提供插件后立即收到相关关键漏洞的扫描结果。
参考资料
[多个外部参考链接已省略]