面向 Supabase 的开源安全审计工具:一个只读 MCP 服务器、一个 CLI 代理和一个 Claude Skill。可发现 RLS 配置错误、暴露的密钥和高风险函数,并返回带有修复 SQL 的评分报告。托管版本:Locksoup。
针对你的数据库后端的安全审计。 只需说“审计我的数据库”,即可获得一份带评分的报告以及精确的修复代码。
可作为 Claude Skill(Supabase、MongoDB)、面向任何 AI 客户端的只读 MCP 服务器,或使用你自己模型的 CLI agent(两者均支持 Supabase)运行。
→ 不想自己运行?Locksoup 是托管版本:带定时复查和告警的 Supabase 安全审计。
2026-10-01 (v1.0.1)
2026-09-30 (文档)
evals/mcp_client.py,评估系统 m。v1.0.0 (2026-09-30):MCP 服务器发布
audit 提示词以及目录资源。端到端基准测试:一个模型通过 stdio 驱动服务器,测试 F1 得分为 0.865,严重项召回率 1.0。BYPASSRLS 的只读角色、全部 20 条查询。anon/authenticated 已被撤销时,不再被报告为暴露。026。uvx/pipx 命令中使用 git+https://github.com/Farenhytee/[email protected]。Claude Code 插件会自动固定版本。--deep 运行使用工具的 agent,在我们的基准测试中得分相同,但成本约为 5 倍。v0.2.1 (2026-09-30)
v0.2.0 (2026-09-29)
--fix: 为你选择的发现打印修复 SQL。它从不被执行。2026-09-29
uvx --from git+… sentinel-mcp)和 agent(pipx install "database-sentinel[agent] @ git+…")各一条命令。sentinel-mcp --role-sql 打印只读角色设置 SQL。2026-09-28
audit 提示词以及作为资源的模式目录。你自己的 LLM 进行分析,因此免费。sentinel-audit)。一个 LangGraph 流水线,可与任何 OpenAI 兼容模型配合使用:OpenRouter、OpenAI 或本地 Ollama。Claude Code 一次性安装审计 skill 和 MCP 服务器(需要 uv):
claude plugin marketplace add Farenhytee/database-sentinel
claude plugin install database-sentinel@database-sentinel
Supabase 用户:创建只读登录(步骤 1),然后在 Claude Code 中运行 /plugin configure database-sentinel@database-sentinel。然后询问:Audit my database。
其他 MCP 客户端及完整设置: MCP 指南
仅 Skill(Claude Code 会自动识别):
git clone https://github.com/Farenhytee/database-sentinel.git ~/.claude/skills/database-sentinel
CLI agent(Supabase,自带模型):
pipx install "database-sentinel[agent] @ git+https://github.com/Farenhytee/database-sentinel"
export SENTINEL_BASE_URL=http://localhost:11434/v1 SENTINEL_MODEL=<model> # Ollama, or any OpenAI-compatible API + SENTINEL_API_KEY
sentinel-audit --dsn "postgresql://sentinel_auditor:<password>@<host>:5432/postgres" \
--rest-url https://<ref>.supabase.co --anon-key <anon key> --repo ./my-app
默认审计是一个提示词加上 anon 探测验证。--deep 改为运行使用工具的 agent:在我们的基准测试中精度相同,成本约为 5 倍。--fix 为你选择的发现打印修复 SQL;它从不被执行。
| 后端 | 模式 | 示例 |
|---|---|---|
| Supabase | 27(目录) | RLS 禁用、前端中的 service-role key、USING (true)、绕过 RLS 的视图、暴露的 SECURITY DEFINER 函数、策略中的 user_metadata、批量赋值、公开 bucket |
| MongoDB | 20(目录) | MongoBleed (CVE-2025-14847)、认证禁用、0.0.0.0/0 Atlas 允许列表、服务端 JS、特权应用用户 |
完整表格见附录 A。
| 后端 | Skill | MCP 服务器 / agent |
|---|---|---|
| Supabase | ✅ | ✅ |
| MongoDB | ✅ | 计划中 |
| Firebase、Postgres、MySQL、跨后端 | 计划中 | 计划中 |
MIT。例外:database_sentinel/agent/、database_sentinel/mcp_server/ 和 database_sentinel/kb/ 为 AGPL-3.0(见各自的 LICENSE)。
Supabase
| 严重性 | 模式 | 说明 |
|---|---|---|
| 🔴 CRITICAL | RLS_DISABLED | 没有行级安全性的表完全暴露 |
| 🔴 CRITICAL | SERVICE_ROLE_EXPOSED | 前端代码中的 service_role key 绕过所有安全 |
| 🔴 CRITICAL | POLICIES_BUT_NO_RLS | 编写了策略但从未启用 RLS |
| 🟠 HIGH | USING_TRUE | 写入或私有数据上的 USING (true) |
| 🟠 HIGH | VIEW_NO_SECURITY_INVOKER | 视图绕过 RLS 并以所有者身份运行 |
| 🟠 HIGH | SECURITY_DEFINER_EXPOSED | 可通过 API 调用的绕过 RLS 的函数 |
| 🟠 HIGH | USER_METADATA_IN_POLICY | 策略信任用户可编辑的元数据 |
| 🟠 HIGH | MASS_ASSIGNMENT | 用户可以更新自己行上的权限/计费列 |
| 🟠 HIGH | GHOST_AUTH | 未确认的注册获得已认证会话 |
| 🟠 HIGH | JWT_SECRET_EXPOSED | 泄露的签名密钥让攻击者伪造任何 token |
| 🟡 MEDIUM | + 17 更多 | anti-patterns.md |
MongoDB
| 严重性 | 模式 | 说明 |
|---|---|---|
| 🔴 CRITICAL | MG-SH-001 MongoBleed (CVE-2025-14847, CISA KEV) | 认证前堆内存泄露;披露时约 87K 实例暴露 |
| 🔴 CRITICAL | MG-SH-002 认证禁用 | 无认证(Meow 勒索软件攻击面) |
| 🔴 CRITICAL | MG-SH-003 面向互联网的 mongod | --bind_ip_all + 可达的 27017 |
| 🔴 CRITICAL | MG-AT-001 Atlas 允许列表 0.0.0.0/0 | 集群可从任何地方访问 |
| 🟠 HIGH | MG-SH-005 服务端 JS 启用 | $where / $function / mapReduce 可达 |
| 🟠 HIGH | MG-SH-007 特权应用用户 | 应用以 root / dbAdminAnyDatabase 连接 |
| 🟠 HIGH | MG-AT-002 Atlas Function 直通 | 通过 HTTPS 的 NoSQL 注入 |
| 🟡 MEDIUM | + 13 更多 | anti-patterns.md |
MongoBleed 探测(mongobleed-probe.md)是一个单包、只读检测器。它已针对 mongo:7.0.20(易受攻击)和 7.0.28(已修补)验证,并且仅在两次可选确认后运行。
只有 SKILL.md(约 2K token)和 core/* 会预先加载;每个后端的文件仅在该后端被检测到时加载。