返回 Bug 清单
BUG-1385project-02中已修复security-injection

ACL 缺失时未授权用户可通过 403 vs 404 区分资源存在性

发现:2026-10-15验证:2026-10-15置信度:90%

症状

未授权 junior 用户探测 voucher_id,通过响应码 403(有ACL)/404(无ACL但不存在)/200(无ACL且存在) 区分资源状态,形成资源枚举漏洞

根因

业务端点先 execute_query 查资源 → 不存在返回 404,存在才继续后续逻辑。无 @acl_required 时攻击者可枚举资源 ID(试 voucher_id=1,2,3...),404 表示不存在,业务层错误表示存在。

修复方案

@acl_required 必须放在业务查询之前装饰器链最外层。已部署的 35 端点装饰器顺序: @app.route → @require_auth → @require_permission → @acl_required → def — 正确。未来端点必须保持此顺序。

错误签名

删 @acl_required 后 test_voucher_get 预期 403 却返回 404;业务端点先查资源存在性再鉴权

技术信息

来源项目

project-02

涉及文件

bk_backend/bk_vouchers_api.py, bk_backend/bk_acl_api.py

标签

project-02, mcp-reported, source-agent