【漏洞更新】SaltStack 多个高危漏洞(含漏洞分析及深信服解决方案)
漏洞名称 : SaltStack 多个高危漏洞
组件名称 : SaltStack
威胁等级 : 高危
影响范围 : SaltStack < 3000.8
SaltStack < 3001.6
SaltStack < 3002.5
漏洞类型 : 远程代码执行
利用条件 : 1、用户认证:不需要用户认证
2、触发方式:远程
造成后果 : SaltStack存在多个漏洞,利用组合公布的漏洞,可以达到未授权远程代码执行。
漏洞分析
1 组件介绍
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
2 漏洞描述
近日,深信服安全团队监测到SaltStack官方发布安全更新修复了三个高危漏洞,其中包括SaltStack未授权访问漏洞(CVE-2021-25281)、SaltStack任意文件写漏洞(CVE-2021-25282)、SaltStack服务端模板注入漏洞(CVE-2021-25283)。通过组合这三个漏洞,可以导致远程代码执行。
CVE-2021-25281 未授权访问
SaltStack SaltAPI中存在一处代码执行漏洞。wheel_async模块未正确处理身份验证请求,导致攻击者利用该模块执行任意 python 代码。
CVE-2021-25282 任意文件写入漏洞
未经授权的访问wheel_async,通过salt-api可以执行任意代码。该漏洞主要是salt.wheel.pillar_roots.write函数在写入操作时存在目录穿越,与CVE-2021-25281、CVE-2021-25283结合实现代码执行。
CVE-2021-25283 模板注入漏洞
SaltStack jinja模板渲染中存在一处代码执行漏洞。该漏洞主要是salt.wheel.pillar_roots.write函数在写入操作时,将存在恶意代码的模板文件写入特定位置,在请求相关页面时触发 jinja 引擎渲染导致代码执行。该漏洞与CVE-2021-25282结合实现代码执行。
3 漏洞分析
CVE-2021-25281 未授权访问
salt-api是saltstack提供的一个用于管理salt-master的开源组件。经过分析在wheel_async模块中存在未授权访问。
经过分析,其中,wheel_async方法存在未授权调用,其他方法(除去SSH)均为生成一个job到zeromq,其后进行消费者再进行认证,而wheel_async异步调用wheel包中的方法。
调用链如下:
salt/salt/netapi/init.py:NetapiClient.run() ⇒
salt/salt/netapi/init.py:NetapiClient.wheel_async() ⇒
salt/salt/wheel/init.py:WheelClient.cmd_async() ⇒
salt/salt/client/mixins.py:AsyncClientMixin.asynchronous()
CVE-2021-25282 任意文件写漏洞
其中salt/salt/wheel/pillar_roots.py:write()方法存在任意写入文件漏洞,不过需要__opts__["pillar_roots"]中的路径存在。
这里的读文件是没有办法利用的,由于是异步调用,所以返回的是jid和tag,通过jid和tag去查询任务执行的结果时是有认证的。
该漏洞可以通过传入恶意的path来绕过检查。
CVE-2021-25283 模板注入漏洞
sdb模块有许多后端,其中一个是rest(salt/sdb/rest.py),rest模块用来从远端的http服务器获取请求,而且支持模版渲染,且默认使用Jinja2引擎。查看官方的示例代码,准备比如两个配置文件
配置文件1:
:
driver: rest
keys:
url: https://api.github.com/users/{{user}}/keys
backend: requests
配置文件2:
sdb://my-rest-api/keys?user=myuser
加载配置文件时,读取到sdb://my-rest-api/keys后,会找到配置文件1中的keys内容,将url作为Jinja2模板编译,使用?user=myuser作为变量渲染url,即会从 https://api.github.com/users/myuser/keys 中拉取数据。
当saltmaster加载配置文件时,即可触发SSTI中的内容。
4 漏洞复现
搭建SaltStack组件3002版本环境,复现该漏洞,效果如下:
影响范围
SaltStack可以运行在几乎所有计算机平台上,由于其跨平台和安全性被广泛使用,成为最流行的管理平台软件之一。可能受漏洞影响的资产主要分布在美国,加拿大等地。
目前受影响的SaltStack版本:
SaltStack < 3000.8
SaltStack < 3001.6
SaltStack < 3002.5
解决方案
1 如何检测组件系统版本
在master或者minio端运行命令 'salt-call --versions-report' 获取saltstack的版本信息以及依赖包信息。
2 官方修复建议
当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:
https://repo.saltproject.io
当前官方已发布受影响版本的对应补丁,建议受影响的用户及时更新官方的安全补丁。链接如下:
https://gitlab.com/saltstack/open/salt-patches
修补程序可用于以下版本:
3002.2
3001.4
3000.6
2019.2.8
2019.2.5
2018.3.5
2017.7.8
2016.11.10
2016.11.6
2016.11.5
2016.11.3
2016.3.8
2016.3.6
2016.3.4
2015.8.13
2015.8.10
注意:如果您正在运行以上未列出的Salt的旧版本,请在应用可用补丁之前将其更新为上述任意版本。
3 深信服解决方案
【深信服下一代防火墙】可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。
【深信服云盾】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。
【深信服安全感知平台】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。
【深信服安全运营服务】深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,云端安全专家即对客户的网络环境进行漏洞扫描,保障第一时间检查客户的主机是否存在此漏洞。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。
【深信服安全云眼】在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。
【深信服云镜】在漏洞爆发第一时间即完成检测能力的发布,部署云端版云镜的用户只需选择紧急漏洞检测,即可轻松、快速检测此高危风险。部署离线版云镜的用户需要下载离线更新包来获取该漏洞的检测能力。
时间轴
2021/2/25 深信服监测到SaltStack 官方发布安全补丁。
2021/2/26 深信服千里目安全实验室发布漏洞通告。
2021/3/1 深信服千里目安全实验室复现该漏洞、发布解决方案。
点击阅读原文,及时关注并登录深信服智安全平台,可轻松查询漏洞相关解决方案。
深信服千里目安全实验室
深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。