跳转至

OpenSSH命令注入CVE-2020-15778

漏洞概述

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

漏洞原理

漏洞触发点如下,当文件复制到远程SSH服务器时,文件路径会附加在本地scp命令的末尾:

比如执行如下命令时 scp source_file user@host: directory/destination_file

在SSH服务器的本地将会执行: scp -t directory/destination_file

同时,在创建本地scp命令时,未清理文件名,攻击者可利用反引号进行命令注入,而linux系统允许以反引号进行文件命名。所以如果把payload写入在反引号中作为文件名,当调用scp命令时就会触发payload。

影响范围

OpenSSH <=8.3p1

漏洞复现

payload:scp /source_file user@ip:'touch /tmp/wow.sh/destination_file '

登录到SSH服务器,可以看到成功执行命令创建了文件:

该漏洞利用条件较为严格,需要获取SSH服务器的密码才能进行命令注入。但是在某些特定场景下也可发挥大用处,比如SSH端口被限制访问,则可通过该漏洞的远程命令执行,从而获取新权限。

修复建议

(1)关注厂商的安全通告和补丁发布:http://www.openssh.com/portable.html (2)禁用scp -r拷贝目录的方式