专栏首页云鼎实验室的专栏首发分析 | SaltStack远程执行代码多个高危漏洞透析(CVE-2021-25281/25282/25283)

首发分析 | SaltStack远程执行代码多个高危漏洞透析(CVE-2021-25281/25282/25283)

北京时间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作为参数传入。

该类中可调用的方法有

— local— local_async— local_batch— local_subset— runner— runner_async— ssh— wheel— 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()

salt/salt/client/mixins.py:AsyncClientMixin.asynchronous()

这里的目标函数是self._proc_function,low参数为POST可控参数,fun参数的值在salt/salt/wheel/init.py:WheelClient.cmd_async()方法中通过low参数的fun键获取。

这里通过salt/salt/client/mixins.py:AsyncClientMixin._proc_function()函数调用salt/salt/client/mixins.py:SyncClientMixin.low(),并通过该函数使用args参数和kwargs参数动态调用wheel包中的方法。

salt/salt/client/mixins.py:SyncClientMixin.low()

可调用的方法如下:

config.applyconfig.update_configconfig.valueserror.errorfile_roots.findfile_roots.list_envfile_roots.list_rootsfile_roots.readfile_roots.writekey.acceptkey.accept_dictkey.deletekey.delete_dictkey.fingerkey.finger_masterkey.genkey.gen_acceptkey.gen_keyskey.gen_signaturekey.get_keykey.printkey.listkey.list_allkey.master_key_strkey.name_matchkey.rejectkey.reject_dictminions.connectedpillar_roots.findpillar_roots.list_envpillar_roots.list_rootspillar_roots.readpillar_roots.write

CVE-2021-25282 有限制任意文件写漏洞

其中salt/salt/wheel/pillar_roots.py:write()方法存在任意写入文件漏洞,不过需要__opts__["pillar_roots"]中的路径存在。

这里的读文件是没有办法利用的,由于是异步调用,所以返回的是jid和tag,通过jid和tag去查询任务执行的结果时是有认证的。

salt/salt/wheel/pillar_roots.py:write()

CVE-2021-25283 模板注入漏洞

通过—log-level=debug参数开启debug模式,定位到了master自动加载的逻辑。

salt/salt/master.py:Maintenance.run()

从代码中可以看出,每一个self.loop_interval将循环一次,loop_interval在配置文件中可以配置,默认为60s。通过debug发现在salt.daemons.masterapi.clean_old_jobs中读取minion配置文件。

调用栈如下:

salt/salt/daemons/masterapi.py:clean_old_jobs() ⇒ salt/salt/minion.py:MasterMinion.init() ⇒ salt/salt/config/init.py:minion_config()

在 salt/salt/minion.py:MasterMinion.init()中发现,自动加载值加载grains相关的参数,grains为saltstack收取各个minion中系统信息的功能。

salt/salt/minion.py:MasterMinion.init()

salt/salt/config/init.py:minion_config()

可以看到minio在加载配置文件的时候调用了一个很诱人的方法apply_sdb(),这个方法解析配置中以sdb://开头的字符串。

salt/salt/config/init.py:apply_sdb()

salt/salt/utils/sdb.py:sdb_get()

在这个函数中sdb://aaaa/bbbb字符串,saltstack将会在配置文件中找aaaa这个配置项,并读取其中driver字段,赋值给fun变量,经bbbb赋值给query参数。最后的salt.loader.sdb(opts, fun, utils=utils)是一个动态调用,通过LazyLoader加载fun变量值对应的方法,并调用,其中LazyLoader将加载salt.sdb包下的所有文件,并调用其中的get方法。

经过查找,最终定位到salt/salt/sdb/rest.py文件。

salt/salt/sdb/rest.py:query()

在这里,key为上述字符串中bbbb的值,可以看到这里还接收形如bbbb?ccc=ddd的参数,并且通过**key_vars传递到compile_template方法中。

这里的render使用的是jinja,众所周知,jinja是可以进行模板注入的,也就是说,在模板可控的情况下,如果不存在过滤,将可以执行任意代码,并且这里传入的参数是profile[key]['url'],也就是配置文件中aaaa配置项中bbbb字典url的值。compile_template函数详情如下:

salt/salt/template.py:compile_template()

这里的render调用的是salt/salt/renderers/jinja.py中的render方法,调用链如下:

salt/salt/template.py:compile_template() ⇒ salt/salt/utils/templates.py:JINJA() ⇒ salt/salt/utils/templates.py:wrap_tmpl_func() ⇒ salt/salt/utils/templates.py:render_jinja_tmpl()

最后调用到render_jinja_tmpl中的template.render()方法,在此处渲染模板,此中并未对传入的参数进行过滤,可以进行模板注入。

但自动加载的逻辑中未加载master的配置文件,但经过翻找,发现某个方法调用了master_config方法,master_config和minion_config一样,都调用了apply_sdb()方法,从而能够实现未授权RCE。

修复建议

  1. 尽快更新官方补丁。
  2. 如果没有用到wheel_async模块,可以在salt/netapi/init.py中将其入口删除。

拓展链接

CVE-2020-17490    CVE-2020-16846  详情请见:

漏洞分析|SaltStack未授权访问及命令执行漏洞分析(CVE-2020-16846/25592)

更多精彩内容点击下方扫码关注哦~

   云鼎实验室视频号

  一分钟走进趣味科技

     -扫码关注我们-

 云鼎实验室互动星球

 一个多元的科技社交圈

  -扫码关注我们-

关注云鼎实验室,获取更多安全情报

文章分享自微信公众号:
云鼎实验室

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

如有侵权,请联系 yunjia_community@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 漏洞情报 | SaltStack多个高危漏洞风险通告

    2021年2月26日,SaltStack发布安全更新,修复了由腾讯安全云鼎实验室安全攻防团队发现的多个安全漏洞。通过利用这些漏洞,最严重可导致未授权远程代码执...

    云鼎实验室
  • 漏洞一披露就被利用,LineageOS、Ghost 服务器遭黑客入侵

    4月30日,安全公司 F-Secure 的研究人员披露了SaltStack两个高危漏洞CVE-2020-11651 和 CVE-2020-11652。而黑客行动...

    FB客服
  • 漏洞预警,VMware远程代码执行漏洞的严重等级达到9.8(满分10)

    就在几天前,一些互联网公司监测到 VMware 官方发布安全公告,披露了包括 CVE-2021-21972、CVE-2021-21973 和 CVE-2021-...

    机器之心
  • SaltStack漏洞导致的挖矿排查思路

    SaltStack是一套C/S架构的运维工具,服务端口默认为4505/4506,两个端口如果对外网开放危害非常大,黑客利用SaltStack的远程命令执行漏洞C...

    CN_Simo
  • 2020护网期间公布漏洞总结-附部分漏洞Poc,Exp

    4.Apache DolphinScheduler远程代码执行漏洞(CVE-2020-11974),危害级别:危急,官方已发布补丁

    Gamma实验室
  • 安全通告丨SaltStack 远程命令执行漏洞风险通告(CVE-2020-11651/CVE-2020-11652)

    近日,腾讯安全云鼎实验室监测到国外安全团队披露了SaltStack管理框架的多个安全漏洞(CVE-2020-11651/CVE-2020-11652),攻击者...

    云鼎实验室
  • 漏洞分析|SaltStack未授权访问及命令执行漏洞分析(CVE-2020-16846/25592)

    一、背景 漏洞概述: SaltStack是一个分布式运维系统,在互联网场景中被广泛应用,有以下两个主要功能:   •     配置管理系统,能够将远程节点维护...

    云鼎实验室
  • 速看!谷歌Chrome四个高危漏洞已更新

    据Security affairs 10月9日消息,谷歌发布了安全更新,解决了适用于Windows、Mac和Linux的Chrome浏览器版本的四个高危漏洞,漏...

    FB客服
  • Struts2-062复现

    Apache Software Foundation 发布了一个安全公告 S2-062,以解决 Struts 2.0.0 到 2.5.29 版本中存在的一个远程...

    用户5878089
  • 安全通告|SaltStack多个高危漏洞风险通告(CVE-2020-16846/CVE-2020-25592)

    近日,腾讯云安全运营中心监测到,SaltStack被曝存在两个高危漏洞(漏洞编号:CVE-2020-16846/CVE-2020-25592),未经身份验证的...

    云鼎实验室
  • SaltStack 远程命令执行漏洞(CVE-2020-16846)

    SaltStack是一个分布式的运维系统,在互联网场景中被广泛应用,有以下两个主要功能: 1.配置管理系统,能够将远程节点维护在一个预定义的状态(例如:确保安装...

    Baige
  • 黑客入侵微软邮件服务器部署勒索软件、惠普更新打印机漏洞|12月2日全球网络安全热点

    美国司法部(DoJ)表示,与名为The Community的国际黑客组织有关联的第六名成员因涉及数百万美元的SIM交换阴谋而被判刑。

    腾讯安全
  • 谁动了我的DevOps:DevOps风险测绘

    DevOps 是 Development 和 Operations 组合的缩写词,它指的是一种协作方法,使企业的应用程序开发团队(Development tea...

    绿盟科技研究通讯
  • Apache Dubbo 高危漏洞通告

    点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 |...

    芋道源码
  • 2021-12微软漏洞通告

    微软官方发布了2021年12月的安全更新。本月更新公布了88个漏洞,包含26个远程代码执行漏洞,21个特权提升漏洞,10个信息泄露漏洞、7个身份假冒漏洞以及3个...

    用户6477171
  • 超三十万台设备感染银行木马、远程代码漏洞可攻击云主机|12月7日全球网络安全热点

    Volkskrant周一报道,一家为荷兰警察、紧急服务和安全部门处理敏感文件的技术公司已成为黑客的目标。在公司Abiom拒绝遵守勒索软件组织LockBit的要求...

    腾讯安全
  • 近年APT组织常用的攻击漏洞

    APT攻击(Advanced Persistent Threat,高级持续性威胁)是利用当下先进的攻击手法对特定目标进行长期持续性的网络攻击。APT攻击的高级体...

    HACK学习
  • Win10早期版本下月终止服务、百万医疗设备存在漏洞风险|全球网络安全热点

    罗马尼亚执法当局宣布逮捕两名作为REvil勒索软件家族成员的人,这对历史上最多产的网络犯罪团伙之一造成了沉重打击。

    腾讯安全
  • 【安全更新】微软5月安全更新多个产品高危漏洞通告

    5月12日,微软发布5月安全更新补丁,修复了55个安全漏洞,涉及Windows、Microsoft Office、Exchange Server、Visual ...

    绿盟科技安全情报

扫码关注云+社区

领取腾讯云代金券