北京时间2月26日凌晨3点,SaltStack官方发布高危漏洞风险通告,包含CVE-2021-25281、25282、25283。此前,云鼎实验室安全研究员1mperio就曾发现该漏洞,并于2020年11月16日报送给SaltStack官方。
在对CVE-2020-17490和CVE-2020-16846进行分析后,发现CVE-2020-17490的补丁存在未修补完全的情况,导致wheel_async仍然存在未授权访问,可以调用wheel模块中的方法,基于此对SaltStack的wheel模块中的方法进行分析,最终发现加载配置模块存在模板注入,可以实现未授权远程代码执行。
引言
SaltStack是VMware子公司,其产品用于运维管理,能够支持数万台服务器,主要功能是配置文件管理和远程执行命令,十分易用且强大,在github有11.4k star。
SaltStack只用python开发,采用C/S架构,其中Server被称为Master,Client被称为Minion,即一个Master能够向多个Minion下发配置文件,远程执行命令。SlatStack是系统总称,主要有salt、salt-master、salt-minion、salt-api等程序组成,其中salt-master和salt-minion的功能为从指定路径读取配置文件并启动。salt-master监听4505和4506端口,分别用于发布消息和接受监控数据。
salt程序可以调用大量函数,并可以指定minion或指定一组minion作为目标。salt-api可以使用cherrypy或tornado来对外提供REST接口,默认使用cherrypy。
本文主要对salt-master和salt-api展开讨论。
文中指定代码位置采用以下约定:FileLocation:Classname.method()或FileLocation:Method()
CVE-2021-25281 未授权访问
通过分析CVE-2020-25592的
https://gitlab.com/saltstack/open/salt-patches/-/blob/master/patches/2020/09/25/3002.patch
可以发现 ,补丁通过调用认证模块对SSH方法进行权限认证,而salt/salt/netapi/init.py:NetapiClient.run()方法通过getattr动态调用NetapiClient类中的方法,并将args和kwargs作为参数传入。