昨天,F-Secure的研究员Harry Sintonen发现了与SCP(安全复制协议)客户端(一种网络协议)相关的35年漏洞,该客户端使用Secure Shell(SSH)在网络上的主机之间进行数据传输。这些SCP客户端容易受到恶意SCP服务器的影响,该服务器可能会对目标目录执行未经授权的更改。在2000年,在SSH客户端中发现了一个目录遍历bug,然后修复了该bug。
漏洞被发现
与SCP客户端相关的漏洞之一允许攻击者将任意恶意文件写入客户端计算机上的目标目录。攻击者可以更改目录的权限以允许进一步的妥协。另一个漏洞是SCP客户端无法验证下载请求后返回给它的对象的有效性。由于控制服务器的攻击者可以轻松地将任意文件丢弃到用户运行SCP的目录(类似于中间人攻击),因此后果非常严重。
发现的主要漏洞列表如下:
CWE-20: SCP客户端不正确的目录名称验证[CVE-2018-20685]
在空(“D0777 0 \n”) 或点 (“D0777 0 .\n”)目录名的帮助下,SCP客户端允许服务器修改目标目录的权限。
CWE-20:SCP客户端缺少收到的对象名称验证[CVE-2019-6111]
由于SCP实现源自1983 rcp(1),因此服务器可以选择将哪些文件/目录发送到客户端。根据Sintonen的帖子,“恶意SCP服务器可以覆盖SCP客户端目标目录中的任意文件。如果执行递归操作(-r),服务器也可以操作子目录(例如覆盖.ssh/authorized_keys)。“此漏洞在WinSCP中称为CVE-2018-20684。
CWE-451:通过对象名称[CVE-2019-6109]进行SCP客户端欺骗
对象名称可用于操作客户端输出,因为进度显示中缺少字符编码。例如,使用ANSI代码隐藏正在传输的其他文件。
CWE-451:SCP客户端欺骗通过stderr [CVE-2019-6110]
恶意服务器可以通过接受并显示来自SCP服务器的任意stderr输出来操纵客户端输出。
这些漏洞会影响Red Hat,Debian和SUSE Linux,OpenSSH 7.9及更早版本以及WinSCP的少数版本中的SCP客户端实现。
如何解决这些漏洞?
对于OpenSSH
用户可以切换到sftp或应用https://sintonen.fi/advisories/scp-name-validator.patch来强化scp以防止服务器端操作尝试。
Sintonen的一个注释:如果远程和本地shell在glob()模式匹配的工作方式上不一致,这个补丁可能会导致问题。因人而异。
对于WinSCP
可以升级到WinSCP 5.14或更高版本。
目前还没有针对PuTTY的修复程序,用户应避免使用PuTTY。也不是因为这个原因,而是因为它对SSH密钥的奇怪和非标准处理。
用户现在更愿意在下载文件和传输文件时处理网络。我们大多数人都非常依赖SSH,因为我们认为它是安全可靠的,但我们是否应该继续信任它?是否可以盲目信任而不事先采取预防措施?