SuperAPI AI 工具集

supabase-audit-rpc

安全与审计

查看项目

更新于 10-15 18:11

技能介绍

用途

本技能用于发现并测试通过 Supabase RPC 端点暴露的 PostgreSQL 函数,识别其中的安全问题,包括行级安全(RLS)绕过、未授权访问以及 SQL 注入。它适合作为 Supabase API 安全测试的一部分,通常在完成表审计之后使用。

主要能力

  • 枚举通过 Supabase RPC 端点暴露的 PostgreSQL 函数。
  • 分析函数的安全属性,例如 SECURITY INVOKER 与 SECURITY DEFINER。
  • 检查函数是否绕过 RLS,尤其是 SECURITY DEFINER 且缺少授权检查的情况。
  • 针对接受 text/json 参数的函数测试 SQL 注入。
  • 评估函数参数类型与返回类型带来的风险,例如接受原始文本参数或返回 setof 多行结果。
  • 输出函数清单、风险等级、测试结果与修复建议。
  • 要求逐步写入上下文文件与审计日志,并收集证据文件。

使用方式

技能通过 Supabase 的 RPC 端点调用函数,端点格式为:

POST https://[project].supabase.co/rest/v1/rpc/[function_name]

使用前需要具备 Supabase URL 和 anon key。推荐先完成表审计。

基本用法示例:

  • “Audit RPC functions on my Supabase project”
  • “Test the get_user_data RPC function”

技能会输出函数清单,标注每个函数的安全状态(如 SAFE、P0 - RLS BYPASS、P0 - SQL INJECTION),并给出分析、测试结果与修复建议。

风险判断依据

技能根据以下特征评估函数风险:

  • SECURITY INVOKER:以调用者权限运行,风险较低。
  • SECURITY DEFINER:以定义者权限运行,风险较高。
  • 接受 text/json 参数:可能存在注入风险。
  • 返回 setof:可能返回多行数据。

适用场景

  • 发现暴露的数据库函数。
  • 测试函数是否绕过 RLS。
  • 检查函数参数中的 SQL 注入。
  • 作为全面 API 安全测试的一部分。

限制与要求

  • 需要 Supabase URL 和 anon key。
  • 推荐先完成表审计。
  • 技能要求在执行过程中逐步更新 .sb-pentest-context.json 和 .sb-pentest-audit.log,不能等到最后批量写入。
  • 需要收集证据到 .sb-pentest-evidence/03-api-audit/rpc-tests/ 目录,包括 function-list.json 和 vulnerable-functions/[name].json。
  • 若文件不存在,需在写入前创建。
  • 技能强调如果执行被中断或崩溃,已发现的发现必须已经保存。

最佳实践(来自资料)

  • 优先使用 SECURITY INVOKER。
  • 始终检查 auth.uid()。
  • 对敏感函数使用 REVOKE 限制访问。
  • 避免使用文本参数进行动态查询。

相关技能

  • supabase-audit-tables-list — 列出暴露的表
  • supabase-audit-rls — 测试 RLS 策略
  • supabase-audit-auth-users — 用户枚举测试