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日

洞源实验室

给TA买糖
共{{data.count}}人
人已赞赏
行业热点

第67期 | GPTSecurity周报

2024-9-12 10:03:33

行业热点

吉大正元实力入选2024年中国网络安全市场100强

2024-9-12 10:03:52

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索