Supabase安全审计报告生成器Skill supabase-report

此技能用于从Supabase安全审计中生成全面的Markdown报告,包括执行摘要、安全评分、漏洞发现和修复指南。适用于渗透测试、安全评估、合规审计和漏洞管理,帮助用户文档化发现、规划修复行动和跟踪安全态势。关键词:Supabase、安全审计、报告生成、渗透测试、漏洞管理、合规、修复计划、安全评分。

安全审计 0 次安装 0 次浏览 更新于 3/18/2026

名称: supabase-report 描述: 从收集的发现中生成全面的Markdown安全审计报告,包含执行摘要、发现和修复指导。

安全报告生成器

🔴 关键: 需要渐进式文件更新

您必须在处理每个部分时立即写入上下文文件,而不是等到最后。

  • 处理每个部分后立即写入.sb-pentest-audit.log
  • 逐步更新.sb-pentest-context.json中的报告元数据
  • 不要等到整个报告生成后才更新文件
  • 如果技能崩溃或中断,部分进度必须已保存

这不是可选的。不进行渐进式写入是一个关键错误。

这个技能从所有收集的发现中生成全面的Markdown安全审计报告。

何时使用此技能

  • 完成安全审计阶段后
  • 为利益相关者文档化发现
  • 创建可执行的修复计划
  • 用于合规和审计跟踪目的

先决条件

  • 审计阶段已完成(上下文文件已填充)
  • 发现收集在.sb-pentest-context.json

报告结构

生成的报告包括:

  1. 执行摘要 — 管理层面的高级概述
  2. 安全评分 — 量化的风险评估
  3. 关键发现 (P0) — 需要立即行动
  4. 高发现 (P1) — 需要尽快解决
  5. 中发现的 (P2) — 计划解决
  6. 详细分析 — 按组件细分
  7. 修复计划 — 优先的行动项
  8. 附录 — 技术细节、方法论

使用方式

生成报告

从审计发现生成安全报告

自定义报告名称

生成报告为security-audit-2025-01.md

特定部分

仅生成执行摘要

输出格式

技能生成supabase-audit-report.md

# Supabase 安全审计报告

**目标:** https://myapp.example.com
**项目:** abc123def.supabase.co
**日期:** 2025年1月31日
**审计师:** 内部安全团队

---

## 执行摘要

### 概述

此安全审计在Supabase实现中识别了**12个漏洞**,包括**3个关键(P0)**问题需要立即关注。

### 关键发现

| 严重性 | 数量 | 状态 |
|----------|-------|--------|
| 🔴 P0 (关键) | 3 | 需要立即行动 |
| 🟠 P1 (高) | 4 | 7天内解决 |
| 🟡 P2 (中) | 5 | 30天内解决 |

### 安全评分

**评分: 35/100 (等级: D)**

应用程序存在显著的安全漏洞,暴露用户数据并允许权限提升。在应用程序可视为安全之前,必须解决关键问题。

### 最关键问题

1. **服务角色密钥暴露** — 可能完全数据库访问
2. **数据库备份公开** — 所有数据可下载
3. **管理功能无认证** — 任何用户可以访问管理功能

### 推荐行动

1. ⚡ **立即 (今天):**
   - 轮换服务角色密钥
   - 使备份桶私有
   - 添加管理角色验证

2. 🔜 **本周:**
   - 在所有表上启用RLS
   - 启用邮件确认
   - 修复Edge Functions中的IDOR

3. 📅 **本月:**
   - 强化密码策略
   - 限制CORS来源
   - 在功能中添加速率限制

---

## 关键发现 (P0)

### P0-001: 服务角色密钥在客户端代码中暴露

**严重性:** 🔴 关键
**组件:** 密钥管理
**CVSS:** 9.8 (关键)

#### 描述

Supabase服务角色密钥在客户端JavaScript代码中被发现。此密钥绕过所有行级安全策略并提供完全数据库访问。

#### 位置

文件: /static/js/admin.chunk.js 行: 89 代码: const SUPABASE_KEY = ‘eyJhbGciOiJIUzI1NiI…’


#### 影响

- 所有数据库表的完全读写访问
- 绕过所有RLS策略
- 访问auth.users表(所有用户数据)
- 能够删除或修改任何数据

#### 概念证明

```bash
curl 'https://abc123def.supabase.co/rest/v1/users' \
  -H 'apikey: [service_role_key]' \
  -H 'Authorization: Bearer [service_role_key]'

# 返回所有用户及其完整数据

修复

立即:

  1. 在Supabase仪表板中轮换服务角色密钥
    • 设置 → API → 重新生成服务角色密钥
  2. 从客户端代码中移除密钥
  3. 重新部署应用程序

长期:

// 将特权操作移动到Edge Functions
// supabase/functions/admin-action/index.ts

import { createClient } from '@supabase/supabase-js'

Deno.serve(async (req) => {
  // 服务器上仅使用服务密钥
  const supabase = createClient(
    Deno.env.get('SUPABASE_URL')!,
    Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
  )

  // 在继续之前验证调用者是管理员
  // ...
})

文档:


P0-002: 数据库备份公开可访问

严重性: 🔴 关键 组件: 存储 CVSS: 9.1 (关键)

描述

名为“backups”的存储桶配置为公开,暴露数据库转储、用户导出和环境机密。

暴露的文件

文件 大小 内容
db-backup-2025-01-30.sql 125MB 完整数据库转储
users-export.csv 2.3MB 所有用户数据含PII
secrets.env 1KB API密钥和密码

影响

  • 完全数据泄露(所有数据库内容)
  • 暴露第三方服务的凭证
  • 用户PII暴露(邮件、姓名等)

修复

立即:

-- 使存储桶私有
UPDATE storage.buckets
SET public = false
WHERE name = 'backups';

-- 删除或移动文件
-- 考虑事件响应程序

凭证轮换:

  • Stripe API密钥
  • 数据库密码
  • JWT秘密
  • 任何其他在secrets.env中的密钥

P0-003: 管理员Edge Function权限提升

严重性: 🔴 关键 组件: Edge Functions CVSS: 8.8 (高)

描述

/functions/v1/admin-panel Edge Function对任何认证用户可访问,无需角色验证。

[… 其他P0发现 …]


高发现 (P1)

P1-001: 邮件确认禁用

严重性: 🟠 高 组件: 认证

[… P1发现 …]


中发现的 (P2)

P2-001: 弱密码策略

严重性: 🟡 中 组件: 认证

[… P2发现 …]


按组件的详细分析

API安全

RLS 访问级别 状态
users 完全读 🔴 P0
orders
posts 仅发布

存储安全

存储桶 公开 敏感文件 状态
avatars
backups 是 (45个文件) 🔴 P0

认证

设置 当前 推荐 状态
邮件确认 禁用 启用 🟠 P1
密码最小长度 6 8+ 🟡 P2

修复计划

阶段1: 关键 (立即)

ID 行动 负责人 截止日期
P0-001 轮换服务密钥 DevOps 今天
P0-002 使备份私有 DevOps 今天
P0-003 添加管理员角色检查 Backend 今天

阶段2: 高优先级 (本周)

ID 行动 负责人 截止日期
P1-001 启用邮件确认 Backend 3天
P1-002 修复get-user-data中的IDOR Backend 3天

阶段3: 中优先级 (本月)

ID 行动 负责人 截止日期
P2-001 强化密码策略 Backend 14天
P2-002 限制CORS来源 DevOps 14天

附录

A. 方法论

此审计使用Supabase Pentest Skills工具包执行,包括:

  • 客户端代码的被动侦察
  • 使用匿名和服务密钥的API端点测试
  • 存储桶枚举和访问测试
  • 认证流程分析
  • 实时通道订阅测试

B. 使用的工具

  • supabase-pentest-skills v1.0.0
  • curl用于API测试
  • 浏览器DevTools用于客户端代码分析

C. 审计范围

  • 目标URL: https://myapp.example.com
  • Supabase项目: abc123def
  • 测试组件: API, 存储, Auth, 实时, Edge Functions
  • 排除项: 无

D. 审计日志

完整审计日志在.sb-pentest-audit.log中可用


报告由supabase-pentest-skills生成 审计完成: 2025年1月31日15:00 UTC


## 评分计算

安全评分基于:

| 因素 | 权重 | 计算 |
|--------|--------|-------------|
| P0发现 | -25每问题 | 关键漏洞 |
| P1发现 | -10每问题 | 高严重性问题 |
| P2发现 | -5每问题 | 中严重性问题 |
| RLS覆盖 | +10如果100% | 所有表有RLS |
| 认证硬化 | +10 | 邮件确认、强密码 |
| 基础评分 | 100 | 起始点 |

### 等级量表

| 评分 | 等级 | 描述 |
|-------|-------|-------------|
| 90-100 | A | 优秀安全态势 |
| 80-89 | B | 良好,需小改进 |
| 70-79 | C | 可接受,需解决问题 |
| 60-69 | D | 差,显著问题 |
| 0-59 | F | 关键,需立即行动 |

## 上下文输入

报告生成器从`.sb-pentest-context.json`读取:

```json
{
  "target_url": "https://myapp.example.com",
  "supabase": {
    "project_url": "https://abc123def.supabase.co",
    "project_ref": "abc123def"
  },
  "findings": [
    {
      "id": "P0-001",
      "severity": "P0",
      "component": "keys",
      "title": "服务角色密钥暴露",
      "description": "...",
      "location": "...",
      "remediation": "..."
    }
  ],
  "audit_completed": "2025-01-31T15:00:00Z"
}

报告定制

包含/排除部分

生成不带附录的报告
仅生成执行摘要

不同格式

以JSON格式生成报告
以HTML生成报告摘要

强制: 上下文文件依赖

⚠️ 此技能要求正确填充的跟踪文件。

先决条件

在生成报告之前,确保:

  1. .sb-pentest-context.json存在并包含来自审计技能的发现
  2. .sb-pentest-audit.log存在并带有时间戳操作
  3. 所有相关审计技能已更新这些文件

如果上下文文件缺失

如果上下文文件缺失或为空:

  1. 不要生成空报告
  2. 通知用户必须先运行审计技能
  3. 推荐运行supabase-pentest进行完整审计

报告生成输出

生成报告后,此技能必须:

  1. 记录到.sb-pentest-audit.log

    [时间戳] [supabase-report] [开始] 生成安全报告
    [时间戳] [supabase-report] [成功] 报告生成: supabase-audit-report.md
    [时间戳] [supabase-report] [上下文更新] 报告生成已记录
    
  2. 更新.sb-pentest-context.json 带有报告元数据:

    {
      "report": {
        "generated_at": "...",
        "filename": "supabase-audit-report.md",
        "findings_count": { "p0": 3, "p1": 4, "p2": 5 }
      }
    }
    

未能更新上下文文件是不可接受的。

相关技能

  • supabase-report-compare — 与先前报告比较
  • supabase-pentest — 先运行完整审计
  • supabase-help — 列出所有可用技能