返回 Bug 清单
BUG-0241project-02高已修复security-cors

租户隔离 fail-closed 改造:X-Tenant-ID 头盲信不校验成员关系,可跨租户注入 RLS 上下文

发现:2026-10-01验证:2026-10-09置信度:70%

症状

接口按传入的 X-Tenant-ID 返回其他租户数据;tenant 缺失请求只产生 warning 日志但正常返回

根因

require_auth 装饰器对 X-Tenant-ID 请求头盲信:不校验该租户是否属于当前用户(user_tenants 成员关系),且 tenant_id 缺失时仅 logger.warning 后放行(warn 模式)。攻击者可携带任意租户 ID 调用,使 set_config 把 RLS 上下文注入到他人租户,形成跨租户越权读写。

修复方案

三段加固:① X-Tenant-ID 必须命中 user_tenants 成员关系否则 403;② BK_TENANT_ENFORCEMENT=enforce 模式下 tenant 缺失(非 allowlist 路径)→403、set_config/DB 异常 →503 fail-closed(绝不在无 RLS 上下文继续);③ allowlist 用段边界匹配('/api/system' 匹配 '/api/system/settings' 但不匹配 '/api/systemx'),生产 compose 默认 enforce。

错误签名

X-Tenant-ID 盲信 tenant_id 缺失仅 warning 放行 set_config RLS 上下文注入 跨租户

技术信息

来源项目

project-02

涉及文件

bk_backend/bk_core.py, docker-compose.prod.yml

标签

多租户, 越权, RLS, project-02, mcp-reported