OpenSSH 命令注入漏洞(CVE-2020-15778)修复,升级openssh9.8p1
文章目录
- 前言
- 漏洞名称
- 漏洞描述
- 修复措施
- 查看当前openssh版本
- 安装必备依赖库
- 下载openssh源码
- 编译安装
- OpenSSL安装步骤
- 下载源码包
- 编译安装
- 配置系统使用新版OpenSSL
- 验证OpenSSL版本
- 重新编译openssh
- 问题修复
- 重启sshd,并检查版本
前言
openssh版本过低会引起命令注入漏洞,生产环境十分危险,需升级openssh到新版本。
漏洞名称
OpenSSH 命令注入漏洞(CVE-2020-15778)
漏洞描述
OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
OpenSSH 9.7p1及之前版本中的scp的scp.c文件存在命令注入漏洞。该漏洞源于外部输入数据构造可执行命令过程中,网络系统或产品未正确过滤其中的特殊元素。攻击者可利用该漏洞执行非法命令。
修复措施
升级openssh 为 9.8p1版本,以下为具体步骤
查看当前openssh版本
[root@rabbitmq1 openssh-9.8p1]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
安装必备依赖库
yum install gcc openssl-devel zlib-devel pam-devel libselinux-devel -y
下载openssh源码
cd /usr/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1
如果要升级10.0版本,下载链接就替换为https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz,其余步骤一样
编译安装
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd
make && make install
这时候我们会报错checking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have "100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)")
,这是因为OpenSSH 9.8p1要求OpenSSL版本至少为1.1.1。但是系统自带的OpenSSL是1.0.2k,我们不能替换它,因为很多系统工具依赖它。我们要为OpenSSH单独编译一个OpenSSL。
OpenSSL安装步骤
下载源码包
cd /usr/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
编译安装
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make && make install
配置系统使用新版OpenSSL
# 备份旧版 OpenSSL
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak# 创建新链接
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl# 更新库路径
echo "/usr/local/openssl/lib" | sudo tee /etc/ld.so.conf.d/openssl.conf
ldconfig -v
验证OpenSSL版本
[root@rabbitmq1 openssl-1.1.1w]# openssl version
OpenSSL 1.1.1w 11 Sep 2023
重新编译openssh
cd /usr/src/openssh-9.8p1
#指定OpenSSL路径安装
sudo ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-selinux --with-privsep-path=/var/lib/sshd --with-ssl-dir=/usr/local/openssl
继续编译安装
make && make install
问题修复
问题1:不支持的配置选项
/etc/ssh/sshd_config line 79: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 80: Unsupported option GSSAPICleanupCredentials
编辑sshd配置文件,注释这两条
问题2 密钥文件权限
Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.
...
Unable to load host key: /etc/ssh/ssh_host_rsa_key
...
sshd: no hostkeys available -- exiting.
权限配置
[root@rabbitmq1 openssh-9.8p1]# chmod 600 /etc/ssh/ssh_host_*_key
[root@rabbitmq1 openssh-9.8p1]# chmod 644 /etc/ssh/ssh_host_*_key.pub
[root@rabbitmq1 openssh-9.8p1]# chown root:root /etc/ssh/ssh_host_*_key
[root@rabbitmq1 openssh-9.8p1]# chown root:root /etc/ssh/ssh_host_*_key.pubsshd -t #如果输出空白即为正确
重启sshd,并检查版本
root@rabbitmq1 openssh-9.8p1]# openssl version
OpenSSL 1.1.1w 11 Sep 2023
[root@rabbitmq1 openssh-9.8p1]# ssh -V
OpenSSH_9.8p1, OpenSSL 1.1.1w 11 Sep 2023
TIPS:强烈建议升级openssh时,多开几个窗口,避免操作失误无法远程!!!!