Quay(包名 dbmcp)是一个面向数据库的安全治理工作台——它同时给人和 AI Agent 提供
受控的数据库访问。安全是这个项目的核心卖点,因此我们认真对待每一个漏洞报告。
请不要在公开 issue 中披露安全漏洞。
- 首选:通过 GitHub 的 Private Vulnerability Reporting(仓库 Security → Report a vulnerability)私下提交。
- 备选:邮件
shmilyljx@gmail.com,标题请带[SECURITY]。
请在报告中包含:受影响版本、复现步骤或 PoC、影响面评估、以及(如有)建议修复方向。 我们会在 72 小时内确认收到,并在评估后与你协商披露时间线。修复发布前请勿公开。
Quay 的设计部署形态是本地进程模式:默认绑定 127.0.0.1:8100,管理后台与 MCP 端点
共用一个 ASGI 应用。安全设计围绕以下边界(详见 DESIGN.md):
- 默认拒绝:SQL 解析失败、多语句无法分类、无法判定的一律按写操作处理,进审批流。
- 拒绝—重提审批:Agent 的写操作先被拒绝并生成审批单(含风险报告),人工在后台批准、
Agent 带
change_id重提后才放行;执行的永远是审批单里存储的 SQL(指纹校验)。 审批单一次性核销(CAS 防并发双花)、有 TTL。prod 环境强制审批。 - 双账号:日常查询走只读账号,仅审批通过的执行切换 writer 账号。
- 密钥不落明文:配置只存
env:///keyring://引用;密码永不出现在日志、审计记录、 工具返回值中;RedisCONFIG/ACL结果与命令原文中的凭证在审计与返回前脱敏。 - 连接与密钥管理不暴露为 MCP 工具——Agent 碰不到;只有人可通过 CLI 或已认证的后台操作。
- 后台认证:
DBM_ADMIN_TOKEN→ HMAC 签名 cookie(httponly + SameSite=Lax)。 - 本地来源校验:管理后台校验
Host白名单(防 DNS rebinding)+ 写请求校验Origin(防跨站状态变更)。 - prod 写二次闸门:查询台 / Redis 控制台对生产环境的写操作,除风险确认外还需再次 输入连接名匹配才放行。
- 通知里的一次性审批链接(默认关闭,设置
notify_action_links):外部渠道(Bark / 企微 / 飞书)的通知可附一个/admin/approvals/<id>/act?t=<令牌>链接,点开即可批准或拒绝这一张 审批单,不需要后台登录。令牌 32 字节随机、库里只存 sha256、用一次即作废、随审批单一起过期, 后台先做了决策则同时失效;GET 只展示、POST 才决策;Host / Origin 校验照旧。令牌明文会经过 你选的通知服务商,开启前请确认你信任该渠道;它只能在admin_base_url可从收通知的设备访问 时使用,把服务暴露出本机的注意事项同样适用。
- 将服务暴露到
127.0.0.1以外(公网 / LAN)——不是设计用法。若必须如此,请自行放在 受信反向代理 + 网络隔离之后,并通过DBM_ADMIN_ALLOWED_HOSTS显式配置允许的 Host。 - 拥有后台
DBM_ADMIN_TOKEN或本机 shell 的人被视为受信操作者。 /mcp端点不做 Host 校验、无认证:它只服务本机的 agent 进程(MCP 客户端不是浏览器, 不携带攻击者可控的 Host)。浏览器经 DNS rebinding 触达127.0.0.1:8100/mcp的场景不在 威胁模型内——本机浏览器里的恶意页面本就能触达本机一切未鉴权服务;若你的机器上跑着不受信的 网页且担心这条路,把服务放在反向代理后并只放行带凭证的请求。写操作无论经哪条路都仍受审批流约束。- 底层数据库、SSH 跳板主机、操作系统 keyring 自身的安全性。
项目处于活跃开发期,仅对最新发布版本提供安全修复。请始终使用最新版。
安全相关的已知限制与设计取舍记录在 DESIGN.md。如果你认为某项限制构成实际可利用的
漏洞,欢迎按上述渠道报告。