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 个步骤。
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
database-sentinel/
├── SKILL.md # 调度器——检测后端,路由审计(约 2K 令牌)
├── DECISIONS.md # 锁定的架构决策(D1-D4 + 替代决策)
├── core/
│ ├── workflow.md # 通用 7 步审计工作流
│ ├── detection.md # 后端检测 + JSON 清单
│ ├── scoring.md # 每个后端的权重,最小值聚合
│ ├── reporting.md # 统一报告格式(文本 + JSON)
│ └── credentials.md # 公开密钥与特权密钥处理
├── backends/
│ ├── supabase/ # 第 1 阶段——已实现
│ │ ├── workflow.md # 专门针对 Supabase 的 7 步审计
│ │ ├── audit-queries.md # 用于模式内省的 20 条 SQL 查询
│ │ ├── anti-patterns.md # 27 种模式(SB-001..SB-027)
│ │ └── fix-templates.md # SQL 修复模板(7 种 RLS 模式等)
│ └── mongodb/ # 第 2 阶段——已实现
│ ├── workflow.md # 专门针对 MongoDB 的 7 步审计
│ ├── introspection.md # mongosh + Atlas Admin API + IaC 扫描
│ ├── anti-patterns.md # 20 种模式(MG-SH-001..014, MG-AT-001..006)
│ ├── mongobleed-probe.md # 安全的 CVE-2025-14847 单包检测器
│ ├── fix-templates.md # 版本矩阵 + mongod.conf + 验证器 + Atlas TF
│ └── test-recipe.md # 仅文档的端到端测试配方
├── compat/
│ └── supabase-sentinel/ # 向后兼容垫片(强制后端=supabase)
│ └── SKILL.md
├── references/
│ ├── vibe-coding-context.md # CVE-2025-48757,泄露研究——跨后端
│ └── cve-feed.md # 跨后端 CVE 列表(已植入 MongoBleed)
├── assets/
│ └── ci/
│ ├── github-action-supabase.yml # 1 个作业——安全审计
│ └── github-action-mongodb.yml # 3 个作业——静态 IaC,实时审计,MongoBleed 探测
├── README.md # 本文件
├── LICENSE # MIT
├── DECISIONS.md
└── sentinel-implementation-plan.md # 多后端扩展路线图
渐进式披露的工作原理: Claude 初始仅加载 SKILL.md(约 2K 令牌)和 core/*。当检测识别出后端时,会加载对应的 backends/<name>/workflow.md 和按需参考文件。仅进行 Supabase 审计不会产生 MongoDB 内容的成本;未来的 Firebase / Postgres / MySQL 扩展遵循相同模式。
每个已实现的后端都附带一个 CI 工作流模板:
| 后端 | 工作流 | 作业模式 |
|---|---|---|
| Supabase | assets/ci/github-action-supabase.yml | 单个作业——安全审计(内省 + 动态探测) |
| MongoDB | assets/ci/github-action-mongodb.yml |
工作流在相关文件变更(迁移、规则文件、IaC、依赖清单)时触发,每周定时运行(周一 06:00 UTC),以及手动触发。它们会在 PR 上发布评论,上传报告工件,并在发现严重问题时使构建失败。
只需说:“为此项目设置持续安全监控。”
Database Sentinel 的反模式数据库来源如下:
$where 注入参见 references/vibe-coding-context.md 和 references/cve-feed.md 获取完整引用集。
Database Sentinel 被设计为对生产环境使用安全:
pg_tables、pg_policies、getCmdLineOpts 等)。默认情况下不执行 DDL 或 DML。Prefer: tx=rollback(PostgREST 原生;零数据修改)BEGIN…ROLLBACK(事务性 DDL)abortTransaction()/_sentinel_probe/{random} 处的金丝雀集合_sentinel_probe 模式 + DROP DATABASE(可选,破坏性——显示明确警告).invalid TLD。 测试电子邮件使用 RFC 6761 保留域,这些域无法接收邮件。欢迎贡献。最有价值的贡献:
backends/<name>/anti-patterns.md,附带严重程度、检测查询、修复代码以及真实世界证据(CVE / 泄露 / Splinter / CIS)。backends/<name>/fix-templates.md 中更好的策略模式、边缘情况或性能优化。backends/mongodb/mongobleed-probe.md 中的“经验证”注释)。backends/mongodb/ 和 backends/supabase/ 的结构。实施计划(sentinel-implementation-plan.md)中包含了每个的合同。git checkout -b add-new-pattern)mysql_native_password 弃用处理)BACKENDS.md 快速参考、supabase-sentinel 垫片的弃用时间线npx database-sentinel audit 用于非 Claude 环境supabase-sentinel 技能名称仍然可以通过 compat/supabase-sentinel/ 处的兼容垫片使用。它将审计强制限制为仅 Supabase,并产生与 v1 无法区分的输出。退役日期:待定;至少通过下一个次要版本。
MIT——你可以以任何方式使用它,无论是商业用途还是其他。
为 vibe-coding 时代而构建。
因为“它能工作”和“它是安全的”是完全不同的两码事。
| 严重程度 | 模式 | 说明 |
|---|
| 🔴 严重 | 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 |
三个作业——静态 IaC 扫描(始终运行,无需密钥),实时审计(基于 vars.AUDIT_LIVE == 'true' 门控),MongoBleed 探测(基于 vars.MONGOBLEED_PROBE == 'true' + 所有权确认门控) |
| 后端 | 内置工具 | 遗漏项 | Database Sentinel 覆盖范围 |
|---|
| Supabase | Splinter(16 个 lint) | 策略是否真正阻止了未授权访问 | 对每个 CRUD 路径进行实时的 tx=rollback 测试,针对每个表 |
| Supabase | Splinter | Ghost-auth(邮箱确认绕过) | 使用 .invalid TLD 进行注册探测 |
| Supabase | Splinter | 通过不带 WITH CHECK 的 UPDATE + 敏感列进行批量赋值 | 将列名与策略形状进行交叉引用 |
| Supabase | Splinter | 代码库扫描 | 在前端代码中查找 service_role 密钥、硬编码 JWT、已提交的 .env 文件 |
| MongoDB | Atlas Advisor | MongoBleed 运行时确认 | 单包协议级检测器(已针对 7.0.20 + 7.0.28 验证) |
| MongoDB | Atlas Advisor | 可自修改的角色文档 | 源代码模式 + 集合验证器交叉检查 |
| MongoDB | Trivy / Aikido | Atlas 特定配置(白名单、IAM、CMK) | 直接通过 Atlas Admin API 审计 |
| MongoDB | mongoaudit(2018 年弃用) | 2025 年后的活跃性 | 维护的模式目录,包含 2025–2026 年 CVE |