MeterSphere的一次越权审计

news/2024/9/18 14:48:31/ 标签: metersphere

1 MeterSphere简介

MeterSphere是一个一站式开源持续测试平台,它提供了测试跟踪、接口测试、UI测试和性能测试等功能。它全面兼容JMeter、Selenium等主流开源标准,助力开发和测试团队实现自动化测试,加速软件的高质量交付。MeterSphere 的特点包括开源、一站式服务、全生命周期支持、持续测试能力以及团队协作支持。

MeterSphere的技术栈包括后端Spring Boot、前端Vue.js、中间件MySQL和Kafka、基础设施Docker和Kubernetes,以及测试引擎JMeter。

MeterSphere 提供了多租户、多角色的管理模型,用户可根据所在团队的实际情况进行灵活的租户体系映射。

  • 系统:每个独立部署的 MeterSphere 即称为一套系统。
  • 系统级角色:角色的权限范围为整个系统,常见的角色如系统管理员、系统成员,可管理整个系统内的租户、用户及测试资源,同时可变更修改系统级配置参数。
  • 组织:MeterSphere 中的一级租户,可映射为不同的部门或者产品线。
  • 组织级角色:角色的权限范围限定在某个组织当中,常见的角色如组织管理员及组织成员,可在组织中创建项目、发起测试、查看测试报告等。
  • 项目:以项目纬度管理各种类型测试数据,各个项目间数据隔离。
  • 项目级角色:角色的权限范围限定在某个项目当中,常见的角色如项目管理员、项目成员,可在项目中创建、修改、执行测试计划、功能测试用例、接口测试用例、查看测试报告等。
  • 自定义角色:可创建不同所属类型的自定义角色,满足更多样化的团队管理及在线协作。

MeterSphere 的主要功能包括:

  • 测试跟踪:提供测试用例管理、测试计划执行和测试报告自动生成等功能。
  • 接口测试:提供API管理、Mock服务、场景编排和多协议支持。
  • UI测试:基于Selenium实现的浏览器自动化测试,支持低代码自动化测试。
  • 性能测试:兼容JMeter,支持分布式和高并发的性能测试。

MeterSphere的架构图如下:

MeterShpere各组件间的关系如下:

MeterSphere的角色关系图如下:

2 MetaShpere项目结构

GateWay:API 网关项目。

Eureka:服务注册中心。

工作台:MeterSphere 项目的工作台模块。

项目设置:MeterSphere 项目的项目设置模块。

测试跟踪:MeterSphere 项目的测试跟踪模块。

接口测试:MeterSphere 项目的接口测试模块。

UI 测试:MeterSphere 项目的UI 测试模块。

性能测试:MeterSphere 项目的性能测试模块。

系统设置:MeterSphere 项目的系统设置模块。

报告统计:MeterSphere 项目的报告统计模块。

Node Controller:为接口或者性能测试提供独立节点类型的测试资源池。

MySQL:MeterSphere 项目的主要数据均存储在 MySQL。

Redis:MeterSphere 项目登录用户的 Session 和任务队列信息存储在 Redis。

Minio:MeterSphere 项目的分布式对象存储模块。

Kafka:接收 JMeter 产生的接口测试或者性能测试的结果数据。

Prometheus:收集压力机及被测系统的监控数据。

Data Streaming:从 Kafka 中获取接口测试或者性能测试结果数据进行处理后存入 MySQL 数据库。

Docker Engine:为 Node Controller 提供 JMeter 容器运行环境。

Selenium Grid:为 UI自动化测试提供运行环境,支持分布式拓展。

3 越权漏洞分析

在MetaShpere系统的system-setting模块中,定义了多种管理配置功能,例如整个系统的用户、工作管理、用户组与权限等。

其中以下端点返回用户有关的信息,包含团队的workspaceId、id、azureDevopsId、zentaoId等诸多数据,通过Service层的方法getAllUserGroup返回,接收参数为url的路径变量userId,例如/user/group/all/{userId}。

getAllUserGroup方法的逻辑如下:

getAllUserGroup方法接收一个userid作为参数,查询该用户所属的所有用户组,并为每个用户组收集包括组ID、类型和相关资源ID在内的信息。对于工作空间类型和项目类型的用户组,还会额外收集工作空间或项目的信息。最终,方法会返回一个包含所有用户组信息的列表。

对比getAllUserGroup的Controller,editGroupPermission使用了shiro配置权限要求,只有在用户权限满足一定条件时才能访问该端点,而getAllUserGroup未配置任何权限,认证用户都可调用,因此产生了越权漏洞。

4 漏洞修复

查看commit记录,官方已经给getAllUserGroup这个Controller新增了权限配置。

作者:罗晟

2024年9月9日

洞源实验室


http://www.ppmy.cn/news/1524109.html

相关文章

Windows 环境下安装、使用、nodeJs 连接 TiDB 数据库

Windows 环境下安装、使用、nodeJs 连接 TiDB 数据库 2024 年 9 月 11 日:官方文档表示要体验 TiDB,只支持 Linux 环境,可以用 Windows11 的子系统 ubuntu,但没有找到完全成功的案例,最后用了 Docker 的方式安装&#…

VitePress 自定义 CSS 指南

VitePress 是一款基于 Vite 和 Vue 3 的静态网站生成器,专为文档编写而设计。尽管 VitePress 提供了丰富的默认主题,但在某些情况下,我们可能需要对其进行更深入的定制以满足特定的视觉需求。本文将详细介绍如何通过覆盖根级别的 CSS 变量来自…

分布式光伏的劣势

能量供应不稳定:受天气影响大:分布式光伏主要依靠太阳能发电,天气状况对其发电量影响显著。在阴雨、多云或雾霾等天气条件下,光伏板接收的太阳辐射大幅减少,发电量会急剧下降,导致电力供应不稳定。例如在连…

【video clips 专栏 2.1 -- videopad 删除视频中间部分】

文章目录 videopad 删除视频中间部分步骤指南示例说明 videopad 删除视频中间部分 使用视频剪辑工具 VideoPad 删除视频的中间某一部分,以下是一个详细的步骤指南和示例: 步骤指南 下载并安装 VideoPad: 如果你还没有安装 VideoPad&#x…

ABB机械手备份与恢复

ABB机械手备份与恢复 备份恢复系统 备份 ABB机器人数据备份的对象是所有正在系统内存中运行的RAPID程序和系统参数。当机器人系统出现错乱或者重新安装系统以后,可以通过备份快速地把机器人恢复到备份时的状态。 如果导出到U盘需要将U盘插入USB接口,位置…

ctfshow-PHP反序列化

web254 源码 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com //mytime 2023-12-4 0:22 */ error_reporting(0)…

【LeetCode面试150】——205同构字符串

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;**定期更新相关算法面试题**&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大…

数据结构--二叉树(C语言实现,超详细!!!)

文章目录 二叉树的概念代码实现二叉树的定义创建一棵树并初始化组装二叉树前序遍历中序遍历后序遍历计算树的结点个数求二叉树第K层的结点个数求二叉树高度查找X所在的结点查找指定节点在不在完整代码 二叉树的概念 二叉树&#xff08;Binary Tree&#xff09;是数据结构中一种…

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUONR)带入会计凭证

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUNOR)带入会计凭证 财务有个要求需要将付款建议的付款参考和分配字段写入最后的ZP凭证 最后的效果大概就是这样的 折腾了很久, 1、先是想到的GGB1的替代,但是试验了很久都没有搞定,貌似很多人遇到了这个情况。 2、然后…

坐牢第三十七天(Qt)

作业&#xff1a; 使用qt做一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPixmap> #include <QBitmap> #include <QLabel> //标签类 #include <QLineEdit> //行编辑器类 #include <QPushBu…

【QT】自制一个简单的小闹钟,能够实现语音播报功能

做了一个自制的小闹钟&#xff0c;能够自己输入时间&#xff0c;以及对应的闹铃&#xff0c;时间到了自动播放设定的闹铃&#xff0c;可以随时取消重新设定&#xff0c;采用分文件编译 注意&#xff1a;需要在.pro文件中加入&#xff1a;QT core gui texttospeech 代码…

Leetcode 最长连续序列

算法流程&#xff1a; 哈希集合去重&#xff1a; 通过将数组中的所有元素放入 unordered_set&#xff0c;自动去除重复元素。集合的查找操作是 O(1)&#xff0c;这为后续的快速查找提供了保证。 遍历数组&#xff1a; 遍历数组中的每一个元素。对于每个元素&#xff0c;首先检…

深入理解Docker核心原理:全面解析Docker Client

随着云计算与容器技术的飞速发展&#xff0c;Docker已经成为软件开发、部署和运维中的重要工具之一。在Docker的架构中&#xff0c;Docker Client作为用户操作Docker系统的接口&#xff0c;起着至关重要的作用。本文将详细解析Docker Client的核心原理、工作机制、常用命令以及…

复仇时刻 华为的狙击还没结束

文&#xff5c;琥珀食酒社 作者 | 积溪 华为的复仇时刻已到啊 名场面即将再次上演 看过华为和苹果发布会的人 应该都有似曾相识的感觉 去年8月底 雷女士访华第二天 华为发布了Mate 60先锋计划 9月13日苹果发布iPhone 15 恰恰就在这天 华为咔嚓一下 又放出了大折叠屏…

使用Python中的igraph为绘图添加标题和图例

在 igraph 中&#xff0c;可以通过添加标题和图例来增强图形的可读性和表达能力。我们可以使用 igraph.plot 函数进行绘图&#xff0c;并通过它的参数来指定标题和图例。 1、问题背景 在python中的igraph库中&#xff0c;能否为绘图添加图例和标题&#xff1f;在手册或教程中都…

动手学深度学习(pytorch土堆)-02TensorBoard的使用

1.可视化 代码使用了 torch.utils.tensorboard 将数据记录到 TensorBoard 以便可视化。具体来说&#xff0c;它将标量数据记录到目录 logs 中&#xff0c;使用的是 SummaryWriter 类。 代码分解如下&#xff1a; SummaryWriter("logs")&#xff1a;初始化一个 Ten…

Unity 之如何实现基于OpenAI的ChatGPT的聊天机器人

文章目录 前言接入说明Http请求GPT社区库1.C#/.Net的库2.OpenUPM库3.语音对话GPT实现Unity 接入OpenAI1.导入包2.设置你的 OpenAI 帐户3.向 OpenAPI 发出请求4.语音对话功能5.代码实现6.UI界面实现精彩推荐前言 在当前的技术环境中,人工智能聊天机器人越来越普遍。OpenAI的Ch…

搭建Windows下的Rust开发环境

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 2.1.1 安装vs_buildtools 在Windows系列操作系统中&#xff0c;Rust开发环境需要依…

CSS实现优惠券透明圆形镂空打孔效果等能力学习

前言&#xff1a;无他&#xff0c;仅供学习记录&#xff0c;通过一个简单的优惠券Demo实践巩固CSS知识。 本次案例主要学习或巩固一下几点&#xff1a; 实现一个简单的Modal&#xff1b;如何进行复制文本到粘贴板&#xff1b;在不使用UI的svg图片的情况下&#xff0c;如何用C…

cyw43012 wifi+蓝牙二合一模块推荐

CYWL6302 超低功耗WiFi蓝牙模块参数介绍: 1、Wi-Fi 4 (802.11n and 802.11ac-friendly) Dual-band (2.4/5 GHz) MCS8 (256-QAM) for 20MHz channels, up to 78Mbps PHY data rate 2、major chip is cyw43012 3、Supports BDR (1Mbps), EDR (2/3Mbps), Bluetooth LE (1/2Mbps…