CVE-2024-6387:OpenSSH 竞态条件漏洞分析报告
概览
CVE-2024-6387 是在 OpenSSH 服务器(sshd)中发现的一个关键安全漏洞,特别影响从 8.5p1 到 9.7p1 的版本。它涉及一个竞态条件,允许未经认证的远程攻击者潜在地在受影响的服务器上执行代码或导致服务拒绝(DoS)。该漏洞由 CVE-2006-5051 的回归引起,首次公开日期为 2024 年 7 月 1 日。
漏洞详情
• CVSS 评分:8.1(高)
• 攻击向量:网络
• 复杂度:高
• 所需权限:无
• 用户交互:无
• 影响范围:未改变
• 保密性影响:高
• 完整性影响:高
• 可用性影响:高
此漏洞通过 sshd 进程的信号处理中的竞态条件触发。攻击者可以通过在设定时间内未能认证成功来利用此漏洞,触发不安全的信号处理,从而导致代码执行或服务崩溃。
受影响的版本和产品
• OpenSSH 版本 8.5p1 至 9.7p1。
• 红帽企业 Linux(RHEL)9 及其衍生产品,包括在红帽 OpenShift 容器平台和红帽 Ceph 存储中使用的特定版本。
• 漏洞概述
• CVE-2024-6387是一个涉及OpenSSH信号处理程序的竞争条件漏洞。当客户端未在规定的时间内完成身份验证时(LoginGraceTime),sshd会异步调用SIGALRM处理程序。然而,SIGALRM处理程序调用了多种不适合异步信号安全的函数,例如syslog(),这些函数可能导致远程代码执行(RCE)。
漏洞的利用条件
1. SSHD版本:该漏洞影响OpenSSH 8.5p1到9.8p1之间的版本。
2. 操作系统:该漏洞在基于glibc的Linux系统上可被远程利用,因为syslog()调用了async-signal-unsafe的函数。
3. 配置:sshd的默认配置会受到影响。
利用步骤
1. 触发条件:未在LoginGraceTime内完成身份验证。默认时间是120秒(老版本为600秒)。
2. 异步信号处理:当LoginGraceTime时间到达时,sshd的SIGALRM处理程序被调用。该处理程序调用syslog()等不适合异步信号的函数。
利用细节
1. 发送数据包:攻击者通过发送特制的数据包,试图触发sshd中的竞争条件。
2. 竞争条件的窗口:
o 利用网络延迟和时间差异来调整攻击时机,增加触发竞争条件的机会。
o 发送包含大量公钥的认证请求,利用多次调用free()函数的机会来增加竞争条件窗口。
3. 内存布局操作:通过精确控制内存分配和释放,制造出易受攻击的内存布局。例如,利用内存泄漏和垃圾数据填充来操控内存状态,使得竞争条件窗口内的内存状态变得不一致。
4. 异步调用syslog():在SIGALRM处理程序中异步调用syslog(),尝试调用malloc()或free(),触发不一致的内存状态。
攻击场景
1. 伪造的公钥认证请求:发送包含伪造公钥的SSH认证请求,尝试让sshd进入处理这些公钥的代码路径。
2. 时间窗口:利用发送认证请求与SIGALRM信号之间的时间差,通过多次尝试,在正确的时间窗口内触发竞争条件。
以下是对如何利用Qualys Security Advisory中提到的CVE-2024-6387漏洞的分析和步骤:
例子和分析
如图片中所示的示例代码:
• 信号处理程序的使用:示例代码中展示了如何注册SIGHUP和SIGTERM信号处理程序,使用syslog()记录日志并调用free()释放内存。
• 竞争条件分析:当SIGHUP信号处理程序正在执行且调用了syslog()时,如果同时收到SIGTERM信号,SIGTERM信号处理程序会被调用并尝试再次调用syslog()和free(),从而导致内存状态不一致,可能引发内存损坏甚至远程代码执行。
实际攻击步骤
1. 发送认证请求:持续发送包含伪造公钥的认证请求。
2. 调整时机:利用网络延迟和响应时间的反馈,调整发送请求的时机,确保请求在SIGALRM信号触发之前到达。
3. 触发竞争条件:利用精心构造的内存状态,在SIGALRM处理程序中触发不一致的内存操作。
概览
CVE-2024-6387 是在 OpenSSH 服务器(sshd)中发现的一个关键安全漏洞,特别影响从 8.5p1 到 9.7p1 的版本。它涉及一个竞态条件,允许未经认证的远程攻击者潜在地在受影响的服务器上执行代码或导致服务拒绝(DoS)。该漏洞由 CVE-2006-5051 的回归引起,首次公开日期为 2024 年 7 月 1 日。
漏洞详情
• CVSS 评分:8.1(高)
• 攻击向量:网络
• 复杂度:高
• 所需权限:无
• 用户交互:无
• 影响范围:未改变
• 保密性影响:高
• 完整性影响:高
• 可用性影响:高
此漏洞通过 sshd 进程的信号处理中的竞态条件触发。攻击者可以通过在设定时间内未能认证成功来利用此漏洞,触发不安全的信号处理,从而导致代码执行或服务崩溃。
受影响的版本和产品
• OpenSSH 版本 8.5p1 至 9.7p1。
• 红帽企业 Linux(RHEL)9 及其衍生产品,包括在红帽 OpenShift 容器平台和红帽 Ceph 存储中使用的特定版本。
• 漏洞概述
• CVE-2024-6387是一个涉及OpenSSH信号处理程序的竞争条件漏洞。当客户端未在规定的时间内完成身份验证时(LoginGraceTime),sshd会异步调用SIGALRM处理程序。然而,SIGALRM处理程序调用了多种不适合异步信号安全的函数,例如syslog(),这些函数可能导致远程代码执行(RCE)。
漏洞的利用条件
1. SSHD版本:该漏洞影响OpenSSH 8.5p1到9.8p1之间的版本。
2. 操作系统:该漏洞在基于glibc的Linux系统上可被远程利用,因为syslog()调用了async-signal-unsafe的函数。
3. 配置:sshd的默认配置会受到影响。
利用步骤
1. 触发条件:未在LoginGraceTime内完成身份验证。默认时间是120秒(老版本为600秒)。
2. 异步信号处理:当LoginGraceTime时间到达时,sshd的SIGALRM处理程序被调用。该处理程序调用syslog()等不适合异步信号的函数。
利用细节
1. 发送数据包:攻击者通过发送特制的数据包,试图触发sshd中的竞争条件。
2. 竞争条件的窗口:
o 利用网络延迟和时间差异来调整攻击时机,增加触发竞争条件的机会。
o 发送包含大量公钥的认证请求,利用多次调用free()函数的机会来增加竞争条件窗口。
3. 内存布局操作:通过精确控制内存分配和释放,制造出易受攻击的内存布局。例如,利用内存泄漏和垃圾数据填充来操控内存状态,使得竞争条件窗口内的内存状态变得不一致。
4. 异步调用syslog():在SIGALRM处理程序中异步调用syslog(),尝试调用malloc()或free(),触发不一致的内存状态。
攻击场景
1. 伪造的公钥认证请求:发送包含伪造公钥的SSH认证请求,尝试让sshd进入处理这些公钥的代码路径。
2. 时间窗口:利用发送认证请求与SIGALRM信号之间的时间差,通过多次尝试,在正确的时间窗口内触发竞争条件。
以下是对如何利用Qualys Security Advisory中提到的CVE-2024-6387漏洞的分析和步骤:
例子和分析
如图片中所示的示例代码:
• 信号处理程序的使用:示例代码中展示了如何注册SIGHUP和SIGTERM信号处理程序,使用syslog()记录日志并调用free()释放内存。
• 竞争条件分析:当SIGHUP信号处理程序正在执行且调用了syslog()时,如果同时收到SIGTERM信号,SIGTERM信号处理程序会被调用并尝试再次调用syslog()和free(),从而导致内存状态不一致,可能引发内存损坏甚至远程代码执行。
实际攻击步骤
1. 发送认证请求:持续发送包含伪造公钥的认证请求。
2. 调整时机:利用网络延迟和响应时间的反馈,调整发送请求的时机,确保请求在SIGALRM信号触发之前到达。
3. 触发竞争条件:利用精心构造的内存状态,在SIGALRM处理程序中触发不一致的内存操作。