mcpField
S
supabase-detect

supabase-detect

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

关于 supabase-detect

supabase-detect 是用于安全审计的技能,可检查公开可访问的 Web 应用是否使用 Supabase。它结合域名、JavaScript、API 端点和响应头等证据,并记录结果供后续审计使用。

主要功能

  1. 01检查 Supabase 域名特征
  2. 02识别 JavaScript 客户端签名
  3. 03检查 Supabase API 端点
  4. 04分析响应头
  5. 05记录置信度与证据

适用场景

  1. 01审计前确认是否使用 Supabase
  2. 02检查多个应用的 Supabase 使用情况
  3. 03调查单页应用中的 Supabase 用法

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yoanbernabeu/supabase-pentest-skills --skill supabase-detect

安装后在 Claude Code 中输入/supabase-detect确认已加载。

详细介绍

Supabase 检测

🔴 严重:必须渐进式更新文件

必须在执行过程中写入上下文文件,而不能等到最后才写。

  • 每次发现后立即写入 .sb-pentest-context.json
  • 每次操作之前和之后都要记录到 .sb-pentest-audit.log
  • 不要等到技能执行完毕后才更新文件
  • 如果技能崩溃或中断,之前的所有发现都必须已经保存

这不是可选项。未能渐进式写入属于严重错误。

此技能用于确定 Web 应用是否使用 Supabase 作为后端。

何时使用此技能

  • 对未知应用启动安全审计
  • 在运行其他审计技能前验证是否使用 Supabase
  • 快速检查多个应用是否使用 Supabase

前置条件

  • 目标 URL 必须可公开访问
  • 需要互联网连接,以获取并分析目标

检测方法

此技能使用多种检测方式:

1. 域名模式匹配

在以下内容中搜索与 Supabase 相关的域名:

  • HTML 源代码
  • JavaScript 包
  • 网络请求(通过内联脚本)

检测模式:

*.supabase.co
*.supabase.com
supabase-cdn.com
2. JavaScript 客户端检测

查找 Supabase 客户端库特征:

// Import patterns
import { createClient } from '@supabase/supabase-js'
const { createClient } = require('@supabase/supabase-js')

// Client initialization
supabase.createClient(
createClient('https://
SUPABASE_URL
NEXT_PUBLIC_SUPABASE
VITE_SUPABASE
REACT_APP_SUPABASE
3. API 端点检测

检查 Supabase 的典型端点:

/rest/v1/
/auth/v1/
/storage/v1/
/realtime/v1/
/functions/v1/
4. 响应标头分析

查找 Supabase 专用标头:

x-supabase-*
sb-*

用法

基本检测
Check if https://myapp.example.com uses Supabase
输出详细信息的检测
Detect Supabase on https://myapp.example.com with full details

输出格式

检测到 Supabase
═══════════════════════════════════════════════════════════
 SUPABASE DETECTED
═══════════════════════════════════════════════════════════

 Target: https://myapp.example.com
 Status: ✅ Supabase usage confirmed

 Detection Evidence:
 ├── Domain: abc123def.supabase.co (found in main.js)
 ├── Client: @supabase/supabase-js v2.x detected
 ├── Endpoints: /rest/v1/, /auth/v1/, /storage/v1/
 └── Headers: x-supabase-api-version present

 Project Reference: abc123def
 Project URL: https://abc123def.supabase.co

 Context saved to: .sb-pentest-context.json
═══════════════════════════════════════════════════════════
未检测到 Supabase
═══════════════════════════════════════════════════════════
 DETECTION RESULT
═══════════════════════════════════════════════════════════

 Target: https://myapp.example.com
 Status: ❌ Supabase not detected

 Scanned:
 ├── HTML source: No Supabase patterns
 ├── JavaScript bundles: 3 files analyzed, no matches
 ├── Network patterns: No Supabase endpoints
 └── Response headers: No Supabase headers

 Note: The app may use a self-hosted Supabase or custom domain.
       Try providing a known Supabase URL manually if you have one.
═══════════════════════════════════════════════════════════

上下文输出

检测到 Supabase 时,技能会将信息保存到 .sb-pentest-context.json:

{
  "target_url": "https://myapp.example.com",
  "detection": {
    "detected": true,
    "confidence": "high",
    "timestamp": "2025-01-31T10:00:00Z",
    "evidence": [
      {
        "type": "domain",
        "value": "abc123def.supabase.co",
        "location": "/static/js/main.js",
        "line": 1247
      },
      {
        "type": "client_library",
        "value": "@supabase/supabase-js",
        "version": "2.x"
      }
    ]
  },
  "supabase": {
    "project_ref": "abc123def",
    "project_url": "https://abc123def.supabase.co"
  }
}

审计日志条目

每次检测都会记录到 .sb-pentest-audit.log:

[2025-01-31T10:00:00Z] DETECTION_START target=https://myapp.example.com
[2025-01-31T10:00:01Z] FETCH_HTML status=200 size=45KB
[2025-01-31T10:00:02Z] FETCH_JS file=main.js status=200 size=1.2MB
[2025-01-31T10:00:03Z] PATTERN_MATCH type=domain value=abc123def.supabase.co
[2025-01-31T10:00:03Z] DETECTION_COMPLETE result=detected confidence=high

置信度级别

级别标准
高多种证据类型(域名 + 客户端 + 端点)
中单一强证据(域名或明确的客户端初始化)
低仅有间接证据(通用模式,可能误报)

边缘情况

自定义域名

某些 Supabase 项目使用自定义域名(例如,api.mycompany.com)。在这种情况下:

Detect Supabase on https://myapp.com with custom API domain api.mycompany.com
自托管 Supabase

自托管实例不会使用 .supabase.co 域名。请查找:

  • PostgREST 模式(/rest/v1/)
  • GoTrue 认证模式(/auth/v1/)
  • 代码中的 Supabase 客户端库
单页应用

对于使用延迟加载代码块的 SPA:

Detect Supabase on https://myapp.com including all JS chunks

常见问题

❌ 问题: 在 SPA 上检测结果为假阴性
✅ 解决方案: 应用可能会延迟加载 Supabase。尝试先与应用交互以加载所有代码块,或提供已知模式。

❌ 问题: 检测到多个 Supabase 项目
✅ 解决方案: 多租户配置可能会导致这种情况。技能会列出找到的所有项目。

❌ 问题: 检测速度较慢
✅ 解决方案: 分析大型 JS 包需要时间。使用 --quick 模式可加快检测,但检测不够全面:

Quick detect Supabase on https://myapp.com

后续步骤

检测完成后:

  1. 运行 supabase-extract-url,确认并提取项目 URL
  2. 运行 supabase-extract-anon-key,查找 API 密钥
  3. 或使用 supabase-pentest 进行完整的引导式审计

强制要求:渐进式更新上下文文件

⚠️ 此技能必须在执行过程中渐进式更新跟踪文件,而不能只在最后更新。

关键规则:边执行边写入

不要在最后批量写入。请按以下方式操作:

  1. 开始任何操作之前 → 将操作记录到 .sb-pentest-audit.log
  2. 每次发现之后 → 立即更新 .sb-pentest-context.json
  3. 每个重要步骤之后 → 将完成情况记录到 .sb-pentest-audit.log

这样可以确保即使技能遭到中断、崩溃或超时,届时为止的所有发现也都能得到保留。

必需操作(渐进式)
  1. 创建/更新 .sb-pentest-context.json 并写入结果:

    {
      "target_url": "https://myapp.example.com",
      "detection": {
        "detected": true,
        "confidence": "high",
        "timestamp": "...",
        "evidence": [ ... ]
      },
      "supabase": {
        "project_ref": "abc123def",
        "project_url": "https://abc123def.supabase.co"
      }
    }
    
  2. 创建 .sb-pentest-audit.log 并记录日志:

    [TIMESTAMP] [supabase-detect] [START] Starting Supabase detection
    [TIMESTAMP] [supabase-detect] [SUCCESS] Supabase detected with high confidence
    [TIMESTAMP] [supabase-detect] [CONTEXT_UPDATED] .sb-pentest-context.json created/updated
    
  3. 重要:作为审计链中的第一个技能,如果上下文文件不存在,本技能负责创建它们。

不接受未更新上下文文件的情况。

强制要求:收集证据

📁 证据目录: .sb-pentest-evidence/01-detection/

要创建的证据文件
文件内容
initial-scan.json包含所有证据的原始检测结果
supabase-endpoints.txt已发现的 Supabase 端点列表
client-code-snippets/包含相关代码摘录的目录
证据格式
{
  "evidence_id": "DET-001",
  "timestamp": "2025-01-31T10:00:00Z",
  "category": "detection",
  "target_url": "https://myapp.example.com",

  "detection_results": {
    "supabase_detected": true,
    "confidence": "high",
    "project_url": "https://abc123def.supabase.co",
    "project_ref": "abc123def"
  },

  "evidence": [
    {
      "type": "domain_pattern",
      "value": "abc123def.supabase.co",
      "location": "/static/js/main.js",
      "line": 1247,
      "context": "const SUPABASE_URL = 'https://abc123def.supabase.co'"
    },
    {
      "type": "client_library",
      "value": "@supabase/supabase-js",
      "version": "2.x"
    }
  ],

  "curl_command": "curl -s 'https://abc123def.supabase.co/rest/v1/' -H 'apikey: [ANON_KEY]'"
}
添加到 curl-commands.sh
# === DETECTION ===
# Check Supabase API availability
curl -s "$SUPABASE_URL/rest/v1/" -H "apikey: $ANON_KEY" | head -100
添加到 timeline.md
## [TIMESTAMP] - Detection Phase Complete
- Supabase detected with [confidence] confidence
- Project: [project_ref]
- Evidence: `01-detection/initial-scan.json`

相关技能

  • supabase-extract-url — 从代码中提取项目 URL
  • supabase-extract-anon-key — 查找 anon key
  • supabase-pentest — 完整的编排式审计

评论

支持 Markdown