OpenSSH存在高危漏洞(CVE-2024-6387),你修复了吗?

艺帆风顺 发布于 2025-04-07 27 次阅读


一、漏洞概述

CVE-2024-6387是OpenSSH服务器(sshd)中的一个远程代码执行漏洞。它是自1995年OpenSSH问世近20年来首次出现的未经验证的远程执行(RCE)漏洞,攻击者可利用此漏洞提权至root最高权限,在不需要用户交互的情况下执行任意代码。该漏洞于2024年5月被发现,存在于使用glibc的Linux系统上的OpenSSH Server(sshd)中。由于信号处理器竞赛条件存在缺陷,如果客户端没有在默认的LoginGraceTime秒(默认为120秒,旧版OpenSSH中为600秒)内通过身份验证,那么sshd的SIGALRM处理程序就会被异步调用,并调用各种不安全的异步信号函数,最终造成Double-Free内存管理问题,从而允许未经认证的远程攻击者以root用户身份执行任意代码。 

漏洞名称:OpenSSH Server远程代码执行漏洞 

漏洞编号:CVE-2024-6387

公开时间:2024-7-1

受影响版本:8.5p1

注:OpenBSD系统不受该漏洞影响。用户可执行sshd -V确认OpenSSH版本,目前该漏洞技术细节已在互联网上公开,鉴于影响范围较大,建议用户尽快做好自查及防护。

二、解决措施

升级OpenSSH服务器到最新可用版本(版本9.8p1)以修复漏洞。

三、升级前准备

1、openssh版本检查

本次升级的是openEuler 22.03 LTS操作系统

[root@localhost ~]# cat /etc/os-release 
NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"

[root@localhost ~]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.1.1wa  16 Nov 2023

可见该版本在漏洞版本范围,需要对OpenSSH进行升级。

2、备份ssh相关文件

cp -rf /etc/ssh/ /etc/ssh.bak
cp -rf /usr/bin/openssl /usr/bin/openssl.bak
cp -rf /etc/pam.d/ /etc/pam.d.bak
cp -rf /usr/lib/systemd/system /usr/bin/system.bak

3、 安装telnet(防止安装失败无法登录系统)

若升级成功后,可删除telnet。

# 安装telnet
yum install telnet -y
yum install xinetd
# 启动telnet服务
systemctl enable --now xinetd
systemctl enable --now  telnet.socket 

四、获取升级包并升级OpenSSH

在做操作之前记得做快照,避免升级失败无法登录服务器,切记!

1、安装依赖并下载软件包

yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers libedit-devel perl-IPC-Cmd wget tar lrzsz nano
cd /usr/local/src/
wget https://www.zlib.net/zlib-1.3.1.tar.gz
wget https://www.openssl.org/source/old/3.2/openssl-3.2.1.tar.gz
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

# 若服务器不连接外网,则可以直接复制URL到浏览器下载后再上传到服务器上

2、解压升级包

cd /usr/local/src/
tar -xvf openssh-9.8p1.tar.gz
tar -xvf openssl-3.2.1.tar.gz
tar -xvf zlib-1.3.1.tar.gz

3、安装zlib

# 进入zlib-1.3.1目录
cd /usr/local/src/zlib-1.3.1

# 配置
./configure --prefix=/usr/local/src/zlib

# 编译及安装
make -j 4 && make test && make install

4、安装openssl

# 进入openssl-3.2.1目录
cd /usr/local/src/openssl-3.2.1

# 配置编译安装
./config --prefix=/usr/local/src/openssl
make -j 4 &&  make install

# 配置openssl
mv /usr/bin/openssl /usr/bin/oldopenssl
ln -s /usr/local/src/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/src/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/src/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

# 更新动态库
echo "/usr/local/src/openssl/lib64" >> /etc/ld.so.conf
ldconfig
# 查看更新后的版本
openssl version -v

OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)

5、卸载老版本并安装新版本OpenSSH

# 卸载openssh
yum remove -y openssh

# 清理残余文件
mv /etc/ssh /etc/ssh.bak

# 安装新版本openssh9.8p1

# 进入openssh-9.8p1目录
cd /usr/local/src/openssh-9.8p1
# 配置编译安装
./configure --prefix=/usr/local/src/ssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/src/openssl --with-zlib=/usr/local/src/zlib
yum install make
make -j 4 && make install

# 查看目录版本
/usr/local/src/ssh/bin/ssh -V

# 复制新ssh文件
cp -rf /usr/local/src/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp -rf /usr/local/src/openssh-9.8p1/contrib/redhat/sshd.pam /etc/pam.d/sshd
cp -rf /usr/local/src/ssh/sbin/sshd /usr/sbin/sshd
cp -rf /usr/local/src/ssh/bin/ssh /usr/bin/ssh
cp -rf /usr/local/src/ssh/bin/ssh-keygen /usr/bin/ssh-keygen

# 配置允许root登录
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config

# 重启sshd服务
/etc/init.d/sshd restart # 也可以用systemctl restart sshd

# 查看服务运行状态
/etc/init.d/sshd status

# 添加开机启动
chkconfig --add sshd

# 查看升级后ssh版本
[root@localhost ~]# ssh -V
OpenSSH_9.8p1, OpenSSL 3.2.1 30 Jan 2024

6、测试是否正常登录

ssh root@ip

做完所有操作后,最好对服务器重启(reboot),再测试一下是否可以连接。

本篇关于OpenSSH漏洞解决方法的分享完结!。感谢你的阅读,如果觉得还OK,欢迎点赞 ;关注 ; 收藏 ; 私信;一起成长!!!