【漏洞】CVE-2020-15778:OpenSSH scp 命令注入漏洞深度分析

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 / RHEL7.x / 8.x受影响
SUSE Linux Enterprise12 / 15受影响
macOSCatalina 及更早版本受影响

注: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 及以上✅ 安全

七、总结

项目内容
漏洞类型命令注入
CVSS7.8(高危)
根因scp 文件路径参数未转义
影响范围OpenSSH < 8.4p1
修复方案升级 OpenSSH 至 8.4p1+
临时措施禁用 scp,改用 SFTP/rsync
检测命令ssh -V 查看版本号

安全建议:生产环境务必尽快升级 OpenSSH 版本,同时限制 SSH 访问来源 IP,启用密钥认证,避免将 SSH 凭据直接暴露在不安全网络环境下。


标签:OpenSSH CVE 安全漏洞 命令注入 渗透测试 安全运维
分类:安全研究 / 漏洞分析 / 渗透测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值