一、漏洞概述
漏洞名称:OpenSSH Server远程代码执行漏洞
漏洞编号:CVE-2024-6387
公开时间:2024-7-1
CVSS 3.1分数:9.8
威胁类型:代码执行
漏洞等级: 暂无
技术细节状态:已公开
在野利用状态:不明确
PoC状态:x86已公开
OpenSSH是SSH(Secure Shell)协议的开源实现,它支持在两个主机之间提供安全的加密通信,广泛用于Linux等系统,通常用于安全远程登录、远程文件传输和其它网络服务。
2024年7月1日,OpenSSH Server中存在的一个远程代码执行漏洞(CVE-2024-6387,又被称为regreSSHion)细节被公开,该漏洞影响基于glibc的Linux系统上的OpenSSH Server (sshd)。
默认配置下的OpenSSH Server (sshd)中存在信号处理程序竞争条件漏洞,如果客户端未在LoginGraceTime内(默认情况下为120秒,旧版OpenSSH中为600秒)进行身份验证,则sshd的SIGALRM处理程序将被异步调用,但该信号处理程序会调用非异步信号安全的函数,最终造成Double-Free内存管理问题。威胁者可利用该漏洞在基于glibc的Linux系统上以root身份实现未经身份验证的远程代码执行。根据已公开技术细节中的描述,在开启ASLR的i386设备上,利用该漏洞大约需要6-8小时获取root shell,在开启ASLR的amd64设备上则可能需要约一周左右。
二、影响范围
OpenSSH < 4.4p1(不含已修复CVE-2006-5051和CVE-2008-4109的实例)
8.5p1 <= OpenSSH < 9.8p1
注:OpenBSD系统不受该漏洞影响。
用户可执行sshd -V确认OpenSSH版本,目前该漏洞技术细节已在互联网上公开,鉴于影响范围较大,建议用户尽快做好自查及防护。
三、安全措施
目前OpenSSH上游已发布版本更新,受影响用户可通过软件源升级到最新版本(OpenSSH 9.8p1)或编译安装最新版本。
通过软件源更新方法:
Debian/Ubuntu等:apt update && apt install openssh-server
RHEL/CentOS等:yum update openssh
更新后请使用systemctl restart sshd 等命令重启sshd服务。
不同Linux发行版可能会自行维护OpenSSH安全补丁,请前往发行版的openssh-server软件包信息页面,确认漏洞修复情况。例如在Ubuntu 22.04 LTS中,已发布openssh 1:8.9p1-3ubuntu0.10版本完成对本漏洞的修复。
如确有困难无法升级版本的,可采用缓解措施。在sshd配置文件中将LoginGraceTime设置为0,并重启sshd服务。请注意,使用该配置会导致MaxStartups连接耗尽,从而使sshd易受拒绝服务攻击,但可以缓解本漏洞的风险。也可使用iptables等防火墙最小化控制SSH访问范围。
四、参考链接
https://www.qualys.com/regresshion-cve-2024-6387/
https://github.com/7etsuo/cve-2024-6387-poc
https://mp.weixin.qq.com/s/tTOkSN-RHl4UGp38iDWSKw
https://mp.weixin.qq.com/s/N0ku0c1PaGYuGQQAR2950g
https://access.redhat.com/security/cve/CVE-2024-6387
https://ubuntu.com/security/notices/USN-6859-1
https://security-tracker.debian.org/tracker/CVE-2024-6387
五、漏洞复现:
1、漏洞利用poc
https://github.com/zgzhang/cve-2024-6387-poc
https://github.com/acrono/cve-2024-6387-poc
https://github.com/lflare/cve-2024-6387-poc
2、漏洞验证
将poc编译成可执行文件
gcc -o exploit 7etsuo-regreSSHion.c
3、对目标进行验证
./exploit ip 端口
./exploit 192.168.24.139 22
返回结果
Attempting exploitation with glibc base: 0xb7200000
Attempt 0 of 20000
Received SSH version: SSH-2.0-OpenSSH_8.2p1 Debian-4
Received KEX_INIT (1024 bytes)
send_packet: Connection reset by peer
六、升级修复过程
下载更新文件, 如下链接,下载后 修改名称去除 ".png"
https://dev.dzmvc.com/data/update/openssh-9.8p1.tar.gz.png
https://dev.dzmvc.com/data/update/openssl-1.1.1w.tar.gz.png
#升级openssl-1.1.1w tar xf openssl-1.1.1w.tar.gz cd openssl-1.1.1w/ ./config --prefix=/usr/local/openssl make install mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak unlink /usr/lib64/libssl.so ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl ln -s /usr/local/openssl/include/openssl /usr/include/openssl ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so echo '/usr/local/openssl/lib' >> /etc/ld.so.conf ldconfig -v ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 rm /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 rm /usr/lib64/libcrypto.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 unlink /usr/lib64/libssl.so.1.1 unlink /usr/lib64/libcrypto.so.1.1 openssl version #升级openssh-9.8p1 cd /home/openssh/ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup cp /etc/pam.d/sshd /etc/pam.d/sshd.backup rpm -e --nodeps `rpm -qa | grep openssh` tar -zxvf openssh-9.8p1.tar.gz cd openssh-9.8p1 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --without-hardening make install chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key cp -a contrib/redhat/sshd.init /etc/init.d/sshd chmod u+x /etc/init.d/sshd mv /etc/pam.d/sshd.backup /etc/pam.d/sshd mv /etc/ssh/sshd_config /home/openssh/ mv /etc/ssh/sshd_config.backup /etc/ssh/sshd_config chkconfig --add sshd chkconfig sshd on systemctl restart sshd
微信扫码添加微信好友