freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

MeterSphere的一次越权审计
2024-09-09 11:10:12

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新增了权限配置。


# 系统安全 # 漏洞分析 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录