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日
洞源实验室