0x00概述
根据国外安全人员披露,基于ssh文件传输软件scp暴露了多个漏洞,影响windwos、Linux等多个平台的SCP客户端。可以通过恶意scp服务器,可以未经授权的更改目标目录和客户端输出操作,执行恶意脚本。
0x01漏洞介绍
现有的很多scp客户端无都不会校验scp服务器返回的对象是否与请求的对象匹配。问题可以追溯到1983年,基于rcp软件开发scp的初始代码。客户端中的漏洞允许客户端可以任意更改目标目录属性。客户端存在另外两个漏洞则可以允许服务器端混淆欺骗客户端输出,保证恶意操作不被使用者察觉。
0x02表现
恶意scp服务器可以将任意文件写入scp目标目录,更改目标目录权限并且欺骗客户端输出。
0x03 攻击过程
漏洞有系列的几个漏洞组成,其中最关键的是scp客户端对接受的内容没有做任何校验。
1、漏洞版本用户执行scp操作时,攻击者控制的服务器或中间人(*)攻击scp请求者的.bash_aliases文件,将恶意代码注入并发送受害者的服务器。通过发送ANSI控制序列到受害的标准错误(stderr)隐藏对,恶意脚本文件的传输显示:
2.一旦受害者启动新终端时候,就会自动执行.bash_aliases中的恶意命代码(比如wget恶意木马、启动远程shell等等)。
注意:*)中间人攻击确实要求受害者接受错误的主机ssh指纹。
ox04漏洞细节
1. CWE-20:scp客户端不正确的目录名称验证(CVE-2018-20685)
scp客户端允许服务器修改目标scp目录的权限,使用空("D0777 0 ")或点("D0777 0 .")的目录名称。
2. CWE-20:scp客户端对缺少接收对象名称验证(CVE-2019-6111)
由于scp实现源自1983 rcp,由服务器选择哪个文件/目录被发送到客户端。但是,scp客户端只执行粗略验证返回的对象名称(仅仅可以防止目录遍历攻击)。
恶意scp服务器,可以利用注入恶意代码覆盖scp客户端目标目录中的任意文件。
如果执行递归操作(-r),则服务器可以操控scp目录目录子目录(例如覆盖.ssh/authorized_keys,则实现了证书的添加,获得ssh权限)。在WinSCP中的相同漏洞称为CVE-2018-20684。
3. CWE-451:通过对象名称进行scp客户端输出信息欺骗(CVE-2019-6109)
由于进度显示中缺少字符编码,因此可以使用对象名称操纵客户端输出,例如使用ANSI代码来隐藏其他传输文件的输出。
4. CWE-451:通过stderr scp客户端欺骗(CVE-2019-6110)
由于接受并显示来自scp服务器的任意信息,通过stderr输出,恶意scp服务器可以操纵客户端输出,例如通过使用ANSI代码隐藏正在传输的其他文件。
0x05漏洞验证
改漏洞的PoC,披露者还未发布。
0x06受影响的版本
以下软件包具有部分或全部漏洞(四个漏洞,X为受影响):
Tectia SSH scpg3不受影响,它使用sftp协议。
由于该漏洞需要有一定触发条件(恶意的服务器或中间人,scp版本,shell登陆权限、恶意脚本等)影响有限,各大发行方把该漏洞标注为Moderate
安全加固
1. OpenSSH
如果可能,切换到sftp;
安装最新版本;
2、Putty
尚未修复,等待官方发布新版本、
3. WinSCP
升级到WinSCP 5.14或更高版本