OpenSSH 命令注入漏洞(CVE-2020-15778)修复

作者:动易软件 来源:网络 点击数: 发布时间:2023年05月31日

1. 漏洞介绍

OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。 OpenSSH 8.6p1及之前版本中的scp的scp.c文件存在命令注入漏洞。该漏洞源于外部输入数据构造可执行命令过程中,网络系统或产品未正确过滤其中的特殊元素。攻击者可利用该漏洞执行非法命令。 

临时缓解措施: 可以禁用scp,改用rsync等缓解风险(可能会导致小文件机器内拷贝变慢)

2. 漏洞原理

该漏洞发生于 OpenSSH <= 8.3p1 系统,即使在禁用ssh登录的情况下,但是允许使用scp传文件,而且远程服务器允许使用反引号(`),可利用scp复制文件到远程服务器时,执行带有payload的scp命令,从而在后续利用中getshell。

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。

上面的意思主要是说:在知道ssh登录密码,但是禁用了登录,没有禁用scp的情况下,可以利用该漏洞。前提:知道ssh密码。所以该漏洞最重要的防范措施我认为是,保管好ssh密码,设置较高的密码复杂度。

3. 漏洞处理

本次处理直接禁用scp,因为我们现在服务器一般也没有用到scp,上传文件都是用sftp。

处理过程:

#查看openssh安装包
[root@localhost ~]# rpm -qa|grep openssh-*
openssh-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
#卸载openssh-clients
[root@localhost ~]# yum remove openssh-clients -y
#重启sshd服务

[root@localhost ~]# systemctl restart sshd.service


再使用scp命令,就会提示:未找到命令了

[root@localhost ~]# scp

-bash: scp: 未找到命令  


从其他服务器通过scp拷贝文件到本服务器,也会提示找不到命令了。

[root@host-192.168.1.1 logs]# scp localhost.2021-04-07.log root@192.168.1.2:/home/
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
ECDSA key fingerprint is SHA256:no50I09gBIRzzj2oe/4RdVCwopzA44zjeLJWbrgkizM.
ECDSA key fingerprint is MD5:36:9a:5c:7a:dc:a1:41:d0:37:c3:61:01:2c:e7:c6:04.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (ECDSA) to the list of known hosts.
root@192.168.1.2's password:    #此处输入密码
bash: scp: 未找到命令

lost connection  


重启系统测试,ssh正常,sftp正常。

至此, OpenSSH 命令注入漏洞(CVE-2020-15778)修复就宣告完成。

提示1:一劳永逸的方法杜绝被扫描到ssh相关的22端口漏洞,开启防火墙,限制只允许特定ip地址访问22端口。漏扫平台即无法扫描到22端口所有漏洞,当然漏洞实际上还存在,对于开放的可以访问的部分主机需要自行做好安全管理。

提示2:漏扫平台原理:基于扫描到开放的端口(nmap),通过发送tcp流量(telnet)获取返回的payload,根据返回的payload判断是什么工具开放的端口及版本,根据版本来判断存在的漏洞,因此,一般的漏洞修复方式均为升级工具版本。一劳永逸的办法都是关闭端口或使用防火墙进行隔离。