关于 supabase-pentest
此技能按阶段编排 Supabase 应用的完整安全审计,适用于经授权的安全评估与定期审查。它协调检测、凭据提取、API、存储、认证、Realtime 和函数审计,并管理逐步更新的上下文、日志与证据。
主要功能
- 01编排多阶段 Supabase 安全审计
- 02覆盖 API、存储、认证和函数检查
- 03阶段间设置确认与验证点
- 04逐步维护审计上下文和日志
- 05收集证据并生成报告
适用场景
- 01对自有 Supabase 应用进行全面审计
- 02在生产部署前开展安全自查
- 03从指定阶段继续未完成的审计
- 04跳过指定阶段执行审计
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yoanbernabeu/ supabase-pentest-skills --skill supabase-pentest安装后在 Claude Code 中输入/supabase-pentest确认已加载。
详细介绍
Supabase 安全审计编排器
🔵 推荐:复杂审计请使用规划模式
如果你的环境支持 规划模式,强烈建议在开始审计前启用:
- 在编排开始时使用
EnterPlanMode工具- 规划模式有助于更好地组织多阶段审计
- 这样用户可以在执行前确认方案
- 如果无法使用规划模式,请直接开始执行
规划模式可提升审计过程的可追溯性,并增强用户控制。
🔴 关键:必须渐进式更新文件
必须边执行边写入上下文文件,而不是只在最后写入。
- 每发现一项内容后,立即写入
.sb-pentest-context.json- 每项操作前后都要记录到
.sb-pentest-audit.log- 不要等到某个阶段或技能完成后才更新文件
- 如果审计崩溃或中断,此前所有发现都必须已保存
这不是可选要求。未能渐进式写入属于严重错误。
此技能用于编排对基于 Supabase 的应用进行完整安全审计,并通过验证检查点引导你完成每个阶段。
⚠️ 强制要求:渐进式管理上下文文件
开始任何审计前,必须:
- 如果
.sb-pentest-context.json不存在,则创建该文件 - 如果
.sb-pentest-audit.log不存在,则创建该文件 - 创建
.sb-pentest-evidence/目录结构 - 使用目标 URL 和时间戳初始化上下文
执行期间——边执行边写入:
- 每项操作之前 → 记录到
.sb-pentest-audit.log - 每次发现之后 → 立即更新
.sb-pentest-context.json - 每项测试之后 → 将证据保存到
.sb-pentest-evidence/ - 不要批量写入 → 发现每项结果时都必须立即保存
- 每项技能执行后验证 → 检查是否已更新所有文件,再继续
📋 系统化文档记录要求
整个审计过程中,必须系统地维护所有跟踪文件。
必需文件(强制)
| 文件 | 用途 | 更新频率 |
|---|---|---|
.sb-pentest-context.json | 集中记录状态和发现 | 每次发现后 |
.sb-pentest-audit.log | 按时间顺序记录操作 | 每项操作前后 |
.sb-pentest-evidence/timeline.md | 带时间戳的发现记录 | 每次重要发现后 |
.sb-pentest-evidence/curl-commands.sh | 可复现的测试命令 | 每次 curl/HTTP 请求后 |
验证清单(每次阶段转换前)
进入下一阶段前,编排器必须确认:
-
.sb-pentest-context.json包含当前阶段的所有发现 -
.sb-pentest-audit.log记录了执行的所有操作 -
.sb-pentest-evidence/XX-phase-name/中存在证据文件 -
timeline.md已记录任何 P0/P1/P2 级发现 -
curl-commands.sh包含所有已发出的 HTTP 请求
如果任何文件缺失或不完整,请勿进入下一阶段。
渐进式写入模式
每项技能都必须遵循以下模式:
1. [LOG] Write START entry to audit.log
2. [CONTEXT] Update context.json with "phase_in_progress"
3. [ACTION] Perform the test/scan
4. [EVIDENCE] Save evidence file IMMEDIATELY
5. [CURL] Append curl command to curl-commands.sh
6. [TIMELINE] Update timeline.md if significant finding
7. [CONTEXT] Update context.json with results
8. [LOG] Write COMPLETE entry to audit.log
故障恢复
如果技能或阶段失败:
- 所有截至故障时已更新的文件都会保留
- 可从上一个成功检查点恢复审计
- 上下文文件会准确标明审计停止的位置
⚠️ 为什么这很重要:
- 如果审计中断、崩溃或超时,截至该时点的发现都会保留
- 长时间运行的技能必须增量保存进度,而不是只在最后保存
- 用户可以通过查看日志文件实时监控进度
不可接受未能渐进式更新上下文文件的情况。
每项技能都必须在执行过程中负责更新这些文件,而不是只在完成时更新。如果某项技能未能渐进式更新上下文,编排器必须在每次发现后立即更新。
何时使用此技能
- 对 Supabase 应用进行完整的安全评估
- 在上线前进行内部安全自评
- 在出现安全疑虑后审计应用
- 定期开展安全审查
前提条件
- 要审计的应用的公开 URL
- 获得测试目标应用的授权(你必须拥有该应用,或获得明确许可)
- 可访问目标 URL 的互联网连接
重要安全提示
⚠️ AUTHORIZATION REQUIRED
Before proceeding, you must confirm:
1. I own this application, OR
2. I have explicit written authorization to perform security testing
Unauthorized security testing may violate laws and terms of service.
Type "I confirm I am authorized to test this application" to proceed.
审计阶段
协调器会按顺序运行以下阶段,并在各阶段之间请求确认。
📁 提醒:每个阶段结束后,请确认:
.sb-pentest-context.json已更新阶段结果.sb-pentest-audit.log中有 START 和 COMPLETE 条目- 证据文件已保存到
.sb-pentest-evidence/XX-phase/timeline.md已记录所有重要发现curl-commands.sh包含发出的所有 HTTP 请求
阶段 0:初始化
设置审计环境并收集证据。
阶段前操作(如果支持):
- 如果环境支持,请使用
EnterPlanMode - 这样用户可以在执行前验证审计方案
- 如果无法使用 Plan Mode,则直接继续
操作:
- 创建
.sb-pentest-context.json - 创建
.sb-pentest-audit.log - 创建
.sb-pentest-evidence/目录结构 - 使用标题初始化
curl-commands.sh - 以审计开始信息初始化
timeline.md - 将初始化过程记录到
.sb-pentest-audit.log
调用的技能:
supabase-evidence(初始化)
继续前的验证:
- 4 个跟踪文件均已存在
- 证据目录结构完整
- 已确认用户授权
输出: 已准备好按照完整目录结构收集证据
阶段 1:检测
确定目标是否使用 Supabase,并提取基本信息。
调用的技能:
supabase-detect
输出: 确认是否使用 Supabase,并识别项目 URL
证据保存到: .sb-pentest-evidence/01-detection/
阶段 2:提取密钥
扫描客户端代码,查找暴露的凭据。
调用的技能:
supabase-extract-urlsupabase-extract-anon-keysupabase-extract-service-keysupabase-extract-jwtsupabase-extract-db-string
输出: 所有发现的凭据列表及其严重性评估
证据保存到: .sb-pentest-evidence/02-extraction/
阶段 3:API 审计
测试 PostgREST API 暴露情况和 RLS 策略。
调用的技能:
supabase-audit-tables-listsupabase-audit-tables-readsupabase-audit-rlssupabase-audit-rpc
输出: 可访问的表、数据暴露评估及 RLS 缺口
证据保存到: .sb-pentest-evidence/03-api-audit/
阶段 4:存储审计
检查存储桶配置和访问权限。
调用的技能:
supabase-audit-buckets-listsupabase-audit-buckets-readsupabase-audit-buckets-public
输出: 存储桶清单、公开暴露情况及可访问文件
证据保存到: .sb-pentest-evidence/04-storage-audit/
阶段 5:身份验证审计
分析身份验证配置和潜在弱点。
调用的技能:
supabase-audit-auth-configsupabase-audit-auth-signupsupabase-audit-auth-userssupabase-audit-authenticated← 新增:创建测试用户(需征得同意)以检测 IDOR
输出: 身份验证提供商分析、注册限制、用户枚举风险,以及已验证身份与匿名访问的对比
证据保存到: .sb-pentest-evidence/05-auth-audit/
⚠️ 注意:
supabase-audit-authenticated在创建测试用户前会征求明确同意。此步骤为可选,但强烈建议执行,以检测 IDOR 和跨用户访问漏洞。
阶段 6:实时功能与函数审计
测试 WebSocket 通道和 Edge Functions。
调用的技能:
supabase-audit-realtimesupabase-audit-functions
输出: 暴露的通道、函数端点、访问控制问题
证据保存至: .sb-pentest-evidence/06-realtime-audit/ 和 .sb-pentest-evidence/07-functions-audit/
阶段 7:生成报告
汇总所有发现并生成全面报告。
调用的技能:
supabase-report
输出: 完整的 Markdown 报告,包含执行摘要、发现和修复建议
使用计划模式的工作流
支持计划模式时,推荐使用以下工作流:
1. User requests audit → Agent uses EnterPlanMode
2. Agent explores target superficially (detect Supabase, extract URL)
3. Agent writes plan to plan file with:
- Target URL
- Detected Supabase configuration
- Proposed phases to execute
- Estimated scope
4. Agent uses ExitPlanMode → User reviews and approves
5. Agent executes phases with systematic file updates
6. After each phase → Agent confirms files are updated
7. Final report generation
计划模式的优势:
- 用户可以在执行开始前调整范围
- 更清楚地了解将要测试的内容
- 从规划到执行的审计跟踪更加清晰
用法
基本完整审计(使用计划模式)
Run a Supabase security audit on https://myapp.example.com
Agent SHOULD:
- 如果可用,使用
EnterPlanMode - 提交审计计划以供批准
- 通过系统地更新文件来执行
基本完整审计(不使用计划模式)
Run a Supabase security audit on https://myapp.example.com --no-plan
从某个阶段恢复
Continue Supabase audit from Phase 3 (API Audit)
跳过指定阶段
Run Supabase audit on https://myapp.example.com, skip auth audit
上下文文件与证据(必需)
⚠️ 关键:更新跟踪文件并收集证据是必需的。
编排器会创建并管理:
| 文件/目录 | 用途 |
|---|---|
.sb-pentest-context.json | 在各阶段之间存储提取的数据 |
.sb-pentest-audit.log | 记录所有操作及其时间戳 |
.sb-pentest-evidence/ | 专业审计的证据目录 |
证据收集
编排器会在每次审计开始时初始化证据目录:
.sb-pentest-evidence/
├── README.md # Evidence index
├── curl-commands.sh # All reproducible curl commands
├── timeline.md # Chronological findings
├── 01-detection/ # Detection evidence
├── 02-extraction/ # Key extraction evidence
├── 03-api-audit/ # API audit evidence
│ ├── tables/
│ ├── data-samples/
│ ├── rls-tests/
│ └── rpc-tests/
├── 04-storage-audit/ # Storage audit evidence
│ ├── buckets/
│ └── public-url-tests/
├── 05-auth-audit/ # Auth audit evidence
│ ├── signup-tests/
│ └── enumeration-tests/
├── 06-realtime-audit/ # Realtime audit evidence
├── 07-functions-audit/ # Functions audit evidence
└── screenshots/ # Optional screenshots
每项技能在执行过程中都 MUST 将证据保存到相应目录。
必须遵守的更新规则
- 每次技能执行后,都 MUST 使用结果更新
.sb-pentest-context.json - 每项操作都 MUST 连同时间戳记录到
.sb-pentest-audit.log - 如果文件不存在,则 MUST 在审计开始时创建
- 技能完成前,必须更新上下文文件
必须遵守的日志格式
.sb-pentest-audit.log 中的每条记录都必须遵循以下格式:
[YYYY-MM-DD HH:MM:SS] [SKILL_NAME] [STATUS] Message
示例:
[2025-01-31 14:00:00] [supabase-detect] [START] Starting Supabase detection
[2025-01-31 14:00:05] [supabase-detect] [SUCCESS] Supabase detected
[2025-01-31 14:00:05] [supabase-detect] [CONTEXT_UPDATED] .sb-pentest-context.json updated
上下文文件结构
{
"target_url": "https://myapp.example.com",
"started_at": "2025-01-31T10:00:00Z",
"authorization_confirmed": true,
"supabase": {
"detected": true,
"project_url": "https://abc123.supabase.co",
"anon_key": "eyJ...",
"service_key_exposed": false
},
"phases_completed": ["detection", "extraction"],
"findings": []
}
速率限制
编排器会实施自适应速率限制:
- 以正常请求速度开始
- 检测到 HTTP 429(请求过多)时,按指数方式退避
- 遵守 Supabase 的速率限制标头
输出格式
每个阶段结束后:
═══════════════════════════════════════════════════════════
PHASE 2 COMPLETE: Key Extraction
═══════════════════════════════════════════════════════════
Findings:
├── ✅ Anon key found (expected)
├── ❌ P0: Service role key EXPOSED in main.js:1247
└── ⚠️ P1: JWT secret pattern detected
Proceed to Phase 3 (API Audit)? [Y/n]
═══════════════════════════════════════════════════════════
最佳实践
- 在非生产时段运行审计,以尽量减少影响
- 保存上下文文件,用于审计跟踪
- 在修复前与安全团队一起审查发现
- 实施修复后重新运行审计以进行验证
常见问题
❌ 问题: 审计在阶段 1 停止,并提示“未检测到 Supabase” ✅ 解决方案: 应用可能使用了自定义域名。请手动提供 Supabase URL:
Run audit with Supabase URL https://myproject.supabase.co
❌ 问题: 审计期间受到速率限制 ✅ 解决方案: 编排器会自动调整。如果问题持续存在,请等待 5 分钟后恢复。
❌ 问题: 上下文文件已损坏
✅ 解决方案: 删除 .sb-pentest-context.json 并重新开始审计。
相关技能
supabase-help— 所有技能的快速参考supabase-evidence— 证据收集管理supabase-report— 根据现有上下文生成报告supabase-report-compare— 与先前的审计进行比较