用途
本技能用于发现并测试通过 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 — 用户枚举测试