Claude 技能,用于审计你的项目是否存在 RLS 配置错误、暴露的密钥、身份验证绕过以及存储漏洞。包含 27 种源自 CVE-2025-48757 和 10 项安全研究的反模式。适用于生产环境。
一个用于审计数据库后端安全漏洞的 Claude 技能。
将其放入 Claude Code、Cursor 或任何基于 Claude 的环境中。说“审计我的数据库”,即可获得一份全面的安全报告以及精确的修复代码——只需几分钟,而非数天。
超过 170 个 Lovable 应用遭到入侵。 YC 初创公司中 2010 万行数据被暴露。约 87,000 个 MongoDB 实例易受 MongoBleed 攻击(CVE-2025-14847,CISA KEV)。仅在 2025 年的一次事件中就有 180 万个 Firebase 密码泄露。45% 的 AI 生成代码引入了 OWASP Top 10 漏洞。Database Sentinel 测试的是你的安全配置是否真正生效——而不仅仅是存在。
Database Sentinel 对你项目使用的任意后端执行 7 步安全审计:
tx=rollback、金丝雀集合、可选 MongoBleed 检测器)跨后端推理能捕获单后端扫描器遗漏的问题(例如,Firebase Auth UID 被 Postgres API 信任,但未经 JWT 验证)。
| 阶段 | 后端 | 状态 |
|---|---|---|
| 1 | Supabase | ✅ 已发布 |
| 2 | MongoDB(自托管 + Atlas) | ✅ 已发布 |
| 3 | Firebase(Firestore / RTDB / Storage / Functions / Remote Config) | 🚧 计划中 |
| 4 | PostgreSQL(自托管,包括 pgBouncer) | 🚧 计划中 |
| 5 | MySQL(自托管) | 🚧 计划中 |
| 6 | 跨后端交互分析 | 🚧 计划中 |
| 7 | 分发与打磨 | 🚧 计划中 |
Database Sentinel 此前名为 Supabase Sentinel(单后端)。重命名发生在多后端扩展的第 1 阶段。compat/supabase-sentinel/ 处的向后兼容垫片至少会在下一个次要版本中保留旧技能名称——现有用户不会看到回归。
将技能克隆到项目的 skills 目录或一个集中目录:
git clone https://github.com/Farenhytee/database-sentinel.git ~/claude-skills/database-sentinel
然后对 Claude 说:
审计我的数据库
Database Sentinel 将检测你的项目使用了哪些后端,运行相关审计,并生成统一的报告。如果存在多个后端(Firebase Auth + Postgres 数据等),报告将在第 6 阶段落地后包含一个跨后端交互部分。
如果你只想审计特定后端,请明确说明:
审计我的 Supabase 项目
审计我的 MongoDB 实例
调度器将缩小范围。
将 SKILL.md 的内容以及相关 backends/<name>/workflow.md 复制到你的系统提示中。使用你的凭证逐步完成 7 个步骤。
| 严重程度 | 模式 | 说明 |
|---|---|---|
| 🔴 严重 | SB-001 RLS_DISABLED | 未启用行级安全的表——完全暴露于互联网 |
| 🔴 严重 | SB-002 SERVICE_ROLE_EXPOSED | 前端代码中的 service_role 密钥——绕过所有安全机制 |
| 🔴 严重 | SB-003 POLICIES_BUT_NO_RLS | 策略已编写但 RLS 从未启用——虚假安全 |
| 🔴 严重 | SB-005 WRITE_USING_TRUE | 使用 USING(true) 的 INSERT/UPDATE/DELETE——任何人都可以修改 |
| 🟠 高 | SB-006 USING_TRUE_SELECT | 所有行对敏感表上的匿名用户可读 |
| 🟠 高 | SB-007 VIEW_NO_SECURITY_INVOKER | 视图绕过 RLS,以超级用户身份运行 |
| 🟠 高 | SB-008 SECURITY_DEFINER_EXPOSED | public 模式中的函数绕过 RLS,可通过 API 调用 |
| 🟠 高 | SB-009 USER_METADATA_IN_POLICY | 策略引用了用户可修改的元数据——权限提升 |
| 🟠 高 | SB-010 UPDATE_NO_WITHCHECK | 不带 WITH CHECK 的 UPDATE 策略——批量赋值风险 |
| 🟠 高 | SB-011 GHOST_AUTH | 未确认的邮箱注册授予了经过身份验证的会话 |
| 🟠 高 | SB-012 STORAGE_NO_RLS | 存储桶缺少访问控制策略 |
| 🟠 高 | SB-013 JWT_SECRET_EXPOSED | JWT 签名密钥泄露——可伪造任何用户的令牌 |
| 🟡 中 | + 更多 15 种模式 | 参见 backends/supabase/anti-patterns.md |
| 严重程度 | 模式 | 说明 |
|---|---|---|
| 🔴 严重 | MG-SH-001 MongoBleed (CVE-2025-14847, CISA KEV) | 通过精心构造的压缩包进行预认证堆内存泄露。披露时约 87K 个实例暴露。 |
| 🔴 严重 | MG-SH-002 认证已禁用 | mongod 运行时未启用认证——Meow 勒索软件攻击面 |
| 🔴 严重 | MG-SH-003 绑定了互联网的 mongod | --bind_ip_all + 27017 可访问——与 MG-SH-002 配合导致完全入侵 |
| 🔴 严重 | MG-AT-001 Atlas 白名单 0.0.0.0/0 | Atlas 集群可从互联网任意位置访问 |
| 🟠 高 | MG-SH-004 localhost 认证绕过 + 容器执行 | enableLocalhostAuthBypass 为 true + docker exec 访问权限 |
| 🟠 高 | MG-SH-005 服务器端 JS 已启用 | $where / $function / mapReduce 可访问——NoSQL-RCE 攻击面 |
| 🟠 高 | MG-SH-006 未要求 TLS | 线路上传输明文数据 |
| 🟠 高 | MG-SH-007 应用用户拥有特权角色 | 应用以 root / dbAdminAnyDatabase 等角色连接 |
| 🟠 高 | MG-SH-008 可自修改的角色文档 | findByIdAndUpdate(id, req.body) + 无验证器 + 角色字段 |
| 🟠 高 | MG-AT-002 Atlas Function 作为数据库直通 | 通过 HTTPS 的 NoSQL 注入——在 Data API 弃用后大量涌现 |
| 🟠 高 | MG-AT-003 代码中仍使用 Atlas Data API | 已于 2025 年 9 月 30 日弃用;既已损坏,又可能已轮换到审计较少的 Functions |
| 🟡 中 | MG-SH-009 Mongoose < 8.9.5 | CVE-2024-53900 / CVE-2025-23061——populate-match $where 注入 |
| 🟡 中 | + 更多 8 种模式 | 参见 backends/mongodb/anti-patterns.md |
MongoBleed 网络探测(backends/mongodb/mongobleed-probe.md)附带一个单包检测器,可在运行时确认可利用性——已针对 mongo:7.0.20(易受攻击)和 mongo:7.0.28(已修补)验证。它是只读的,需要两次主动确认才能启用,并且从不提取内容。
╔════════════════════════════════════════════════════════╗
║ SENTINEL SECURITY AUDIT ║
╠════════════════════════════════════════════════════════╣
║ Backends: supabase, mongodb ║
║ Scanned: 2026-04-30 14:30 UTC ║
║ Score: 0/100 🔴 ║
║ Summary: 2 backends, 8 findings (3C / 4H / 1M) ║
╚════════════════════════════════════════════════════════╝
─────────────────────────────────────────────────────────
Supabase 35/100 🔴
─────────────────────────────────────────────────────────
🔴 CRITICAL — public.users: RLS Disabled [SB-001]
Risk: Anyone on the internet can read your entire users table.
Attack: Open browser DevTools → copy anon key → curl the API → dump
all emails, names, and metadata.
Proof: curl returns [{"id":"...","email":"[email protected]",...}]
Source: CVE-2025-48757 / Splinter 0013_rls_disabled_in_public
Fix:
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "users_select_own"
ON public.users FOR SELECT TO authenticated
USING ((SELECT auth.uid()) = id);
─────────────────────────────────────────────────────────
MongoDB 0/100 🔴
─────────────────────────────────────────────────────────
🔴 CRITICAL — mongod 7.0.20: MongoBleed (CVE-2025-14847) [MG-SH-001]
Risk: A single TCP packet leaks fragments of MongoDB's memory —
including credentials, queries, and document data — without
requiring any login.
Attack: Public PoC available since Dec 26 2025; CISA KEV. Repeated
requests progressively dump more of the working set.
Proof: buildInfo.version = "7.0.20" (vulnerable; patched in 7.0.28)
zlib compression enabled (default): true
Active probe returned: vulnerable (opCode=2012, 163 bytes)
Source: CVE-2025-14847 / CISA KEV / MongoDB Server Security Update Dec 2025
Fix:
Upgrade to 7.0.28+. Same-day mitigation if upgrade is blocked:
net.compression.compressors = "snappy,zstd" in mongod.conf
✅ PASSING — Supabase: orders, payments, invoices, subscriptions