当前使用版本(必填,否则不予处理)

3.5.3.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

由于getTenantId方法在构造 SQL表达式时默认情况下未对 tenant(租户)的 ID 值进行过滤,当程序启用了 TenantPlugin并且 tenant (租户)ID 可由外部用户控制时,攻击者可利用该漏洞进行 SQL 注入,接管程序的数据库或向操作系统发送恶意命令。

重现步骤(如果有就写完整)

Vulnerability reproduction请参考https://github.com/FCncdn/MybatisPlusTenantPluginSQLInjection-POC/blob/master/Readme.en.md

报错信息

Comment From: miemieYaho

为什么tenant (租户)ID 可由外部用户控制? 你这和mybatis的${}内可由外部用户控制有什么区别?

Comment From: xggz

租户标识应该就是客户端决定的吧,相当于是不可信的

Comment From: willdas

如果底层数据是用number类型来做租户id,就可以避免构造注入