一、背景介绍
ProxyCommand 是 OpenSSH ssh_config 文件中的一个配置选项,它允许通过代理服务器建立 SSH 连接,从而在没有直接网络访问权限的情况下访问目标服务器。这对于需要经过跳板机、堡垒机或代理服务器才能访问的目标主机非常有用。
二、漏洞简介
ssh_config文件中的ProxyCommand、LocalCommand指令或"match exec"谓词通过%u、%h或类似的扩展标记引用用户或主机名时,可能会导致命令注入的风险。
在Git中,用户或主机名中的shell元字符未被禁止(如在主机名中进行命令拼接),这可能导致存储库包含一个带有shell元字符的子模块用户或主机名。这种情况可能引发命令注入漏洞。
三、影响版本
OpenSSH < 9.6
四、漏洞复现
1、复现版本
2、配置SSH规则
在~/.ssh/config中配置如下规则
host *.example.com
ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
这条配置意为:对于所有以.example.com结尾的主机,通过地址为192.0.2.0、端口为8080的代理服务器连接到目标主机。
3、命令执行
使用命令
git clone https://github.com/zls1793/CVE-2023-51385_test --recurse-submodules
https://github.com/zls1793/CVE-2023-51385_test?tab=readme-ov-file
项目结构为:
其中.gitmodules如下:
git的submodule是一个被仓库包含的子仓库,图中的url本应指向该子仓库的地址
git clone执行后效果如图
五、漏洞修复
升级至OpenSSH 9.6p1
水平有限,分析开摆