Farenhytee/supabase-sentinel
GitHub: Farenhytee/supabase-sentinel
一款基于 Claude 的 Supabase 安全审计 Skill,用于检测 RLS 配置错误、密钥泄露和认证绕过等漏洞并生成修复 SQL。
Stars: 0 | Forks: 0
# 🛡️ Supabase Sentinel
**一款用于审计 Supabase 项目安全漏洞的 Claude Skill。**
将其放入 Claude Code、Cursor 或任何支持 Claude 的环境中。只需说“audit my Supabase project”(审计我的 Supabase 项目),即可在几分钟而非几天内获得包含精确修复 SQL 的全面安全报告。
## 它的功能
Supabase Sentinel 对任何 Supabase 项目执行 7 步安全审计:
1. **扫描你的代码库**,查找暴露的 service_role 密钥、硬编码的 JWT 以及提交到 git 的机密信息
2. **内省你的数据库** schema — 表、RLS 策略、视图、函数、存储桶
3. **匹配 27 种已知漏洞模式**,源自 CVE-2025-48757、10 份已发布的安全研究以及数千起已记录的违规事件
4. **动态探测你的 API**,使用 `Prefer: tx=rollback` 技术(零数据修改,对生产环境安全)
5. **测试幽灵认证 (ghost auth)** — 攻击者能否创建未确认的账户并访问你的数据?
6. **生成评分安全报告**,包含通俗易懂的解释和具体的攻击者场景
7. **生成精确的修复 SQL** — 复制、粘贴、完成
## 快速开始
### 选项 1:Claude Code / Cursor
将 skill 文件夹复制到你的项目中:
```
# 克隆到项目的 skills 目录
git clone https://github.com/Farenhytee/supabase-sentinel.git .claude/skills/supabase-sentinel
# 或者如果您拥有一个中央 skills 目录
git clone https://github.com/Farenhytee/supabase-sentinel.git ~/claude-skills/supabase-sentinel
```
然后只需询问 Claude:
```
Audit my Supabase project for security issues
```
Claude 将从 `.env` 文件中自动检测你的 Supabase 凭证,运行完整审计,并呈现报告。
### 选项 2:Claude.ai (使用 computer use)
1. 将此仓库下载为 ZIP
2. 将其上传到启用了 computer use 的 Claude.ai 对话中
3. 询问:“Use the Supabase Sentinel skill to audit my Supabase project”
4. 在提示时提供你的 Supabase URL 和密钥
### 选项 3:手动(任何 AI 助手)
将 `SKILL.md` 的内容复制到你的系统提示或对话中,然后使用你的 Supabase 凭证遵循工作流程。
## 它能捕捉什么
### 严重
| 模式 | 描述 |
|---------|-------------|
| `RLS_DISABLED` | 没有行级安全 (Row-Level Security) 的表 — 完全暴露在互联网上 |
| `SERVICE_ROLE_EXPOSED` | 前端代码中的 service_role 密钥 — 绕过所有安全措施 |
| `POLICIES_BUT_NO_RLS` | 编写了策略但从未启用 RLS — 虚假的安全感 |
| `WRITE_USING_TRUE` | 带有 `USING(true)` 的 INSERT/UPDATE/DELETE — 任何人都可以修改数据 |
### 高危
| 模式 | 描述 |
|---------|-------------|
| `USING_TRUE_SELECT` | 敏感表上的所有行可被匿名用户读取 |
| `VIEW_NO_SECURITY_INVOKER` | 视图绕过 RLS,以 superuser 身份运行 |
| `SECURITY_DEFINER_EXPOSED` | public schema 中的函数绕过 RLS,可通过 API 调用 |
| `USER_METADATA_IN_POLICY` | 策略引用用户可修改的元数据 — 权限提升风险 |
| `UPDATE_NO_WITHCHECK` | 没有 WITH CHECK 的 UPDATE 策略 — 批量赋值风险 |
| `GHOST_AUTH` | 未确认的邮箱注册授予已认证的会话 |
| `STORAGE_NO_RLS` | 存储桶缺少访问控制策略 |
| `JWT_SECRET_EXPOSED` | JWT 签名密钥泄露 — 可以伪造任何用户的 token |
### 中危
| 模式 | 描述 |
|---------|-------------|
| `RLS_NO_POLICIES` | 启用了 RLS 但没有策略 — 所有访问被静默拒绝 (bug) |
| `POLICY_NO_ROLE_SCOPE` | 策略适用于所有角色,包括匿名用户 |
| `MULTIPLE_PERMISSIVE` | 多个许可策略进行 OR 运算 — 最宽松的获胜 |
| `RLS_PERFORMANCE` | `auth.uid()` 未缓存 — 性能下降,潜在 DoS 风险 |
| `PUBLIC_BUCKET` | 存储桶无需认证即可公开访问 |
| `SENSITIVE_COLUMNS` | 名为 `password`、`api_key` 等的列通过 API 暴露 |
| + 另外 9 种模式 | 完整列表请参阅 `references/anti-patterns.md` |
## 示例输出
```
╔════════════════════════════════════════════════════════╗
║ SUPABASE SENTINEL SECURITY REPORT ║
╠════════════════════════════════════════════════════════╣
║ Project: https://myapp.supabase.co ║
║ Scanned: 2026-03-15 14:30 UTC ║
║ Score: 35/100 🔴 ║
║ Summary: 12 tables, 8 policies, 7 findings ║
╚════════════════════════════════════════════════════════╝
🔴 CRITICAL — users: RLS Disabled
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, metadata
Proof: curl returns [{"id":"...","email":"user@real.com",...}]
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);
🟠 HIGH — profiles: SELECT policy uses USING(true)
Risk: All user profiles are readable by anyone, including anonymous users
Attack: Enumerate all profiles via the API to harvest user data
...
✅ PASSING: orders, payments, invoices, subscriptions (4 tables properly secured)
```
## 文件结构
```
supabase-sentinel/
├── SKILL.md # Core skill — 7-step audit workflow (333 lines)
├── references/
│ ├── audit-queries.md # 20 SQL queries for schema introspection
│ ├── anti-patterns.md # 27 vulnerability patterns with severity/detection/fix
│ ├── fix-templates.md # SQL fix templates — 7 RLS patterns, storage, auth, prevention
│ └── vibe-coding-context.md # CVE-2025-48757, research studies, platform analysis
├── assets/
│ └── github-action-template.yml # CI/CD workflow for continuous monitoring
├── README.md
└── LICENSE # MIT
```
**渐进式披露的工作原理:** 当 Claude 加载此 skill 时,最初只读取 333 行的 `SKILL.md`(约 5000 个 token)。参考文件在特定审计步骤期间按需加载 — 步骤 1 加载 `audit-queries.md`,步骤 2 加载 `anti-patterns.md`,步骤 5 加载 `fix-templates.md`。这保持了上下文使用的高效性。
## 持续监控
Supabase Sentinel 可以生成一个 GitHub Action,用于:
- 在每次推送到 `supabase/migrations/` 时运行
- 每周运行(周一 UTC 时间早上 6 点)
- 将发现结果作为 PR 评论发布
- 在发现严重问题时阻止合并
只需询问:“Set up continuous security monitoring for this project.”
模板请参阅 `assets/github-action-template.yml`。
## 研究支持
此 skill 的反模式数据库源自:
- **CVE-2025-48757** — 170+ 个 Lovable 应用暴露,CVSS 9.3(Matt Palmer,2025 年 5 月)
- **Escape.tech** — 5,600 个氛围编码 应用中存在 2,000+ 个漏洞(2025 年 10 月)
- **Veracode** — 45% 的 AI 生成代码引入了 OWASP Top 10 漏洞(2025 年 7 月)
- **Carnegie Mellon SusVibes** — 82.8% 功能正确的 AI 代码是不安全的(2025 年 12 月)
- **SupaExplorer** — 11% 的独立应用暴露 Supabase 凭证(2026 年 1 月)
- **ModernPentest** — 107 家 YC 初创公司暴露了 20.1M 行数据(2026 年 3 月)
- **Wiz Research** — Base44 氛围编码平台中的严重认证绕过(2025 年 7 月)
- **Supabase Security Retro 2025** — 内置顾问功能和差距的官方文档
- **Supabase Splinter** — 映射并扩展了所有 16 个官方安全 lint
完整的研究细分请参阅 `references/vibe-coding-context.md`。
## Supabase Sentinel 能捕捉到而 Supabase Security Advisor 捕捉不到的内容
Supabase 内置的 Security Advisor (Splinter) 运行 16 项 lint。Supabase Sentinel 在此基础上进行了扩展:
| 差距 | Splinter 遗漏的内容 | Supabase Sentinel 覆盖的内容 |
|-----|---------------------|-------------------|
| 策略正确性 | 仅检查策略是否存在 | 测试它们是否真正阻止未授权访问 |
| 动态探测 | 仅静态分析 | 使用 `tx=rollback` 进行实时 API 测试 |
| 幽灵认证 | 未检查 | 测试邮箱确认绕过 |
| 批量赋值 | 未检查 | 检测没有 WITH CHECK 的 UPDATE + 敏感列 |
| 存储配置 | 未检查 | 审计存储桶可见性和 storage.objects RLS |
| 代码库扫描 | 不适用 | 查找前端代码中的 service_role 密钥 |
| 密钥暴露 | 未检查 | 检测硬编码的 JWT 和提交的 .env 文件 |
| 列级安全 | 未检查 | 标记可通过 API 访问的敏感列 |
| CI/CD 集成 | 不可用 | 用于持续监控的 GitHub Action |
## 贡献
欢迎贡献!最有价值的贡献是:
1. **新反模式** — 发现了不在我们数据库中的 Supabase 安全问题?将其添加到 `references/anti-patterns.md`,包括严重性、检测查询、修复 SQL 和真实世界的证据。
2. **修复模板改进** — `references/fix-templates.md` 中更好的 RLS 策略模式、边缘情况或性能优化。
3. **在真实项目上测试** — 在你自己的 Supabase 项目上运行 Supabase Sentinel 并报告误报/漏报。
4. **特定平台模式** — 记录特定于 Lovable、Bolt、Replit 或其他氛围编码平台的安全模式。
### 如何贡献
1. Fork 此仓库
2. 创建分支 (`git checkout -b add-new-pattern`)
3. 添加你的更改并附上清晰的文档
4. 提交 PR,包含模式描述和证据
## 路线图
- [ ] **CLI 工具** — `npx supabase-sentinel audit`,用于非 Claude 环境
- [ ] **MCP 服务器** — 用于 CI/CD 和仪表板的编程访问
- [ ] **Firebase 支持** — 扩展到 Firebase Security Rules 审计
- [ ] **高级仪表板** — 历史趋势、多项目视图、Slack 告警
- [ ] **VS Code 扩展** — 编辑器中的内联安全警告
## 安全性
Supabase Sentinel 专为生产环境安全使用而设计:
- **动态测试使用 `Prefer: tx=rollback`** — PostgREST 处理请求,评估 RLS,返回结果,然后回滚。零数据修改。
- **认证探测使用 `.invalid` TLD** — 测试邮箱使用 RFC 2606 保留域名,无法接收邮件。
- **只读内省** — schema 查询仅读取 `pg_tables`、`pg_policies` 和 `information_schema`。无 DDL 或 DML。
- **开源** — 审计审计器。每个查询和测试在源码中均可见。
## 许可证
MIT — 随意使用,无论是商业还是其他用途。
为氛围编码时代而构建。
因为“它能跑”和“它很安全”是两码事。
标签:API安全, CISA项目, Claude Code, Claude技能, Cursor, CVE-2025-48757, DevSecOps, JSON输出, JWT安全, PostgreSQL, RLS策略检测, SMB, StruQ, Supabase, 上游代理, 动态探测, 多线程, 存储桶漏洞, 密钥泄露, 测试用例, 生产环境安全, 结构化查询, 自动化安全, 行级安全, 身份验证绕过, 错误配置检测