Saltstack 远程命令执行漏洞 CVE-2020-11651 11652

漏洞描述

SaltStack 是基于 Python 开发的一套C/S架构配置管理工具。国外某安全团队披露了 SaltStack 存在认证绕过漏洞(CVE-2020-11651)和目录遍历漏洞(CVE-2020-11652)。

在 CVE-2020-11651 认证绕过漏洞中,攻击者通过构造恶意请求,可以绕过 Salt Master 的验证逻辑,调用相关未授权函数功能,从而可以造成远程命令执行漏洞。

在 CVE-2020-11652 目录遍历漏洞中,攻击者通过构造恶意请求,可以读取、写入服务器上任意文件。

漏洞影响

SaltStack Version < 2019.2.4
SaltStack Version < 3000.2

环境搭建

git clone <https://github.com/vulhub/vulhub.git>
cd vulhub/saltstack/CVE-2020-11652
docker-compose up -d

漏洞复现

salt-master普遍使用这两行代码进行认证,其中clear_load是可控输入点。

auth_type, err_name, key, sensitive_load_keys = self._prep_auth_info(clear_load)
auth_check = self.loadauth.check_authentication(clear_load, auth_type, key=key)

_prep_auth_info首先会识别clear_load输入的字段并选用其中之一作为认证方式,然后传参到check_authentication方法检验认证是否有效。

image-20220209124601649

image-20220209124601649

在第三种认证方式auth_type=='user'中,会由_prep_auth_info获取到系统opt的key,传递到check_authentication中和API参数中携带的key进行==比对。

理论上_prep_auth_info是不可被外部调用的,漏洞成因即是攻击者通过匿名API直接调用_prep_auth_info方法,在回显中拿到self.key,并在后续的请求中使用获取到的key过验证,以root权限执行高危指令。

Mworker daemon进程处理API请求:

class MWorker(salt.utils.process.SignalHandlingProcess):
    """
    The worker multiprocess instance to manage the backend operations for the
    salt master.
    """

其中 handle_clear & handle_aes 函数分别处理明文和加密指令:

image-20220209124623549

image-20220209124623549