CVE-2020-15778:OpenSSH scp 命令注入漏洞深度分析
CVE ID:CVE-2020-15778
CVSS 评分:7.8(高危)
漏洞类型:命令注入(Command Injection)
披露时间:2020-07-24
影响厂商:OpenSSH
影响产品:scp
一、漏洞概述
CVE-2020-15778 是 OpenSSH 官方的 scp 工具中存在的一个命令注入漏洞。该漏洞源于 scp 在处理文件路径时对用户输入的校验不完善,攻击者可以通过在文件名中嵌入恶意命令,在目标系统上执行任意系统命令。
二、漏洞原理
2.1 技术背景
scp(secure copy)是基于 SSH 协议的文件传输工具,底层调用 scp 命令行程序完成操作。其基本语法为:
scp [可选参数] source_file user@host:target_path
在文件传输过程中,scp 会在远程服务器上执行类似如下的命令:
scp -t target_path
其中 -t 表示目标为接收模式(to remote)。
2.2 漏洞成因
问题的核心在于:scp 的 source 参数(即要传输的文件路径)未经充分转义就直接拼接到远程执行的命令中。
例如,用户执行:
scp test.txt user@host:/tmp/'$(whoami)'.txt
scp 会将路径中的 $(whoami) 传递给远程 SSH 会话,由于路径两侧的单引号被忽略或处理不当,反引号或 $() 中的内容会被远程 shell 解释执行,从而造成命令注入。
2.3 攻击流程示意
1. 攻击者构造恶意文件名:
malicious.txt';whoami;'test.txt
2. 执行 scp 命令:
scp "malicious.txt';whoami;'test.txt" user@host:/tmp/
3. scp 将文件名传给远程 shell,shell 解释执行注入命令
4. 远程服务器执行:whoami(或其他任意命令)
三、影响版本
| 产品 | 版本范围 | 状态 |
|---|---|---|
| OpenSSH | < 8.4p1(8.4 以前) | 受影响 |
| Debian | 所有支持版本 | 受影响 |
| Ubuntu | 所有 LTS 版本 | 受影响 |
| CentOS / RHEL | 7.x / 8.x | 受影响 |
| SUSE Linux Enterprise | 12 / 15 | 受影响 |
| macOS | Catalina 及更早版本 | 受影响 |
注:OpenSSH 8.4p1 及之后版本已修复此漏洞。
四、漏洞危害
4.1 危害等级
- 机密性:高(可读取敏感文件)
- 完整性:高(可修改系统配置)
- 可用性:中(可能影响服务可用性)
4.2 典型攻击场景
场景一:敏感文件窃取
攻击者通过 scp 命令注入,可以执行任意命令,从而读取目标系统上的敏感文件。
场景二:后门植入
攻击者可以在目标系统上写入后门程序,实现持久化控制。
场景三:横向移动
在内网环境中,攻击者利用获取的 SSH 凭据,进一步向其他服务器扩展攻击范围。
五、修复建议
5.1 紧急处置
方法一:临时禁用 scp,使用 SFTP 替代
编辑 SSH 配置 /etc/ssh/sshd_config,将 scp 替换为 SFTP:
# 在 sshd_config 中禁用 scp
ForceCommand /usr/lib/openssh/sftp-server
# CentOS/RHEL 重启
systemctl restart sshd
# Ubuntu/Debian 重启
systemctl restart ssh
方法二:使用 rsync 替代 scp
# 使用 rsync + ssh 替代 scp
rsync -avz -e ssh source/ user@host:/dest/
# 或使用 sftp
sftp user@host
5.2 根本修复
升级 OpenSSH 至 8.4p1 及以上版本
# CentOS 7 / RHEL 7
sudo yum update openssh openssh-clients openssh-server
# Ubuntu / Debian
sudo apt update && sudo apt upgrade openssh-client openssh-server
# 验证版本
ssh -V
# 修复后应显示 OpenSSH >= 8.4
编译安装最新版(推荐生产环境)
# 下载 OpenSSH 8.6p1(已修复)
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz
tar -xzf openssh-8.6p1.tar.gz
cd openssh-8.6p1
# 编译安装
./configure --prefix=/usr/local/openssh
make
sudo make install
# 重启服务
sudo systemctl restart sshd
5.3 长期安全加固
# 1. 限制 SSH 访问来源 IP(仅限内网或特定 IP)
# 编辑 /etc/hosts.allow
sshd: 10.0.0.0/8 192.168.0.0/16 : allow
sshd: ALL : deny
# 2. 禁用密码登录,使用密钥认证
# 编辑 /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
# 3. 启用 SSH 日志审计
LogLevel VERBOSE
# 4. 配置 fail2ban 防暴力破解
sudo yum install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
六、漏洞检测
6.1 版本检测
# 检查 OpenSSH 版本
ssh -V
# 检查 openssh rpm 包版本(CentOS/RHEL)
rpm -qa | grep openssh
# 检查 deb 包版本(Ubuntu/Debian)
dpkg -l | grep openssh
6.2 版本对比参考
| 版本 | 状态 |
|---|---|
| OpenSSH < 8.4p1 | ❌ 受影响 |
| OpenSSH 8.4p1 ~ 8.5p1 | ✅ 已修复 |
| OpenSSH 8.6p1 及以上 | ✅ 安全 |
七、总结
| 项目 | 内容 |
|---|---|
| 漏洞类型 | 命令注入 |
| CVSS | 7.8(高危) |
| 根因 | scp 文件路径参数未转义 |
| 影响范围 | OpenSSH < 8.4p1 |
| 修复方案 | 升级 OpenSSH 至 8.4p1+ |
| 临时措施 | 禁用 scp,改用 SFTP/rsync |
| 检测命令 | ssh -V 查看版本号 |
安全建议:生产环境务必尽快升级 OpenSSH 版本,同时限制 SSH 访问来源 IP,启用密钥认证,避免将 SSH 凭据直接暴露在不安全网络环境下。
标签:OpenSSH CVE 安全漏洞 命令注入 渗透测试 安全运维
分类:安全研究 / 漏洞分析 / 渗透测试

9916

被折叠的 条评论
为什么被折叠?



