mcpField
S
supabase-pentest

supabase-pentest

github.com/yoanbernabeu安全71707 次安装39 周前更新
代码仓库

关于 supabase-pentest

此技能按阶段编排 Supabase 应用的完整安全审计,适用于经授权的安全评估与定期审查。它协调检测、凭据提取、API、存储、认证、Realtime 和函数审计,并管理逐步更新的上下文、日志与证据。

主要功能

  1. 01编排多阶段 Supabase 安全审计
  2. 02覆盖 API、存储、认证和函数检查
  3. 03阶段间设置确认与验证点
  4. 04逐步维护审计上下文和日志
  5. 05收集证据并生成报告

适用场景

  1. 01对自有 Supabase 应用进行全面审计
  2. 02在生产部署前开展安全自查
  3. 03从指定阶段继续未完成的审计
  4. 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 的应用进行完整安全审计,并通过验证检查点引导你完成每个阶段。

⚠️ 强制要求:渐进式管理上下文文件

开始任何审计前,必须:

  1. 如果 .sb-pentest-context.json 不存在,则创建该文件
  2. 如果 .sb-pentest-audit.log 不存在,则创建该文件
  3. 创建 .sb-pentest-evidence/ 目录结构
  4. 使用目标 URL 和时间戳初始化上下文

执行期间——边执行边写入:

  1. 每项操作之前 → 记录到 .sb-pentest-audit.log
  2. 每次发现之后 → 立即更新 .sb-pentest-context.json
  3. 每项测试之后 → 将证据保存到 .sb-pentest-evidence/
  4. 不要批量写入 → 发现每项结果时都必须立即保存
  5. 每项技能执行后验证 → 检查是否已更新所有文件,再继续

📋 系统化文档记录要求

整个审计过程中,必须系统地维护所有跟踪文件。

必需文件(强制)
文件用途更新频率
.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-url
  • supabase-extract-anon-key
  • supabase-extract-service-key
  • supabase-extract-jwt
  • supabase-extract-db-string

输出: 所有发现的凭据列表及其严重性评估

证据保存到: .sb-pentest-evidence/02-extraction/

阶段 3:API 审计

测试 PostgREST API 暴露情况和 RLS 策略。

调用的技能:

  • supabase-audit-tables-list
  • supabase-audit-tables-read
  • supabase-audit-rls
  • supabase-audit-rpc

输出: 可访问的表、数据暴露评估及 RLS 缺口

证据保存到: .sb-pentest-evidence/03-api-audit/

阶段 4:存储审计

检查存储桶配置和访问权限。

调用的技能:

  • supabase-audit-buckets-list
  • supabase-audit-buckets-read
  • supabase-audit-buckets-public

输出: 存储桶清单、公开暴露情况及可访问文件

证据保存到: .sb-pentest-evidence/04-storage-audit/

阶段 5:身份验证审计

分析身份验证配置和潜在弱点。

调用的技能:

  • supabase-audit-auth-config
  • supabase-audit-auth-signup
  • supabase-audit-auth-users
  • supabase-audit-authenticated ← 新增:创建测试用户(需征得同意)以检测 IDOR

输出: 身份验证提供商分析、注册限制、用户枚举风险,以及已验证身份与匿名访问的对比

证据保存到: .sb-pentest-evidence/05-auth-audit/

⚠️ 注意: supabase-audit-authenticated 在创建测试用户前会征求明确同意。此步骤为可选,但强烈建议执行,以检测 IDOR 和跨用户访问漏洞。

阶段 6:实时功能与函数审计

测试 WebSocket 通道和 Edge Functions。

调用的技能:

  • supabase-audit-realtime
  • supabase-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:

  1. 如果可用,使用 EnterPlanMode
  2. 提交审计计划以供批准
  3. 通过系统地更新文件来执行
基本完整审计(不使用计划模式)
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 将证据保存到相应目录。

必须遵守的更新规则
  1. 每次技能执行后,都 MUST 使用结果更新 .sb-pentest-context.json
  2. 每项操作都 MUST 连同时间戳记录到 .sb-pentest-audit.log
  3. 如果文件不存在,则 MUST 在审计开始时创建
  4. 技能完成前,必须更新上下文文件
必须遵守的日志格式

.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": []
}

速率限制

编排器会实施自适应速率限制:

  1. 以正常请求速度开始
  2. 检测到 HTTP 429(请求过多)时,按指数方式退避
  3. 遵守 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 — 与先前的审计进行比较

评论

支持 Markdown