漏洞摘要 威胁:SQL 注入 MavenGroupId:com.baomidou MavenArtifactId:mybatis-plus 受影响版本:3.x 受影响组件:TenantPlugin 描述:租户插件在构建 SQL 表达式时未能正确处理租户 ID 值,直接将其拼接到 SQL 表达式中。当应用程序启用了租户插件,且租户 ID 可被外部用户控制时,会导致 SQL 注入。 结果:成功的 SQL 注入漏洞可能导致敏感数据从数据库中读取、数据库数据修改(插入/更新/删除)、在数据库上执行管理操作(如关闭 DBMS)、从 DBMS 文件系统中恢复内容以及在某些情况下,向操作系统发出命令。 漏洞复现 测试版本:3.4.2 参见 "https://github.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-tenant" 构建一个 spring 应用程序并启用租户插件: 示例代码展示如何设置租户 ID 和返回指定租户数据记录。 接口 返回一个指定租户的数据记录。 内容预览 com.example.demo.config.MybatisPlusConfig (部分代码截图) com.example.demo.common.TenantHolder (部分代码截图) com.example.demo.controller.HelloController (部分代码截图) db: (SQL 脚本截图内容) 测试使用空白参数的接口 请求地址: 使用 执行 sql 注入并获取所有数据。 漏洞详情 测试版本:3.0.7.1 测试版本:3.4.2 恢复建议 此漏洞不太可能被修复,因此如果您使用 MybatisPlus 租户插件且租户 ID 可被外部控制,请自行进行过滤、检查等适合您系统的操作。