From a57932ab3d6bd08df6effdd3f4d626f303376f78 Mon Sep 17 00:00:00 2001 From: Thierry Date: Tue, 2 Jun 2026 20:41:13 +0200 Subject: [PATCH] docs(agents): broaden supabase-backend-auditor triggers to api/* upload/storage/secret routes (THI-339) Self-critique finding from the 02/06 WS3 re-run (first run post-THI-326): the Resend sender lives in a Vercel Edge route (api/support/notify.ts), not a Deno Edge Function. The frontmatter only listed supabase/functions/* as a trigger, so the agent could be skipped on the very file it should audit (backend secret + BOLA on an object). Broaden the trigger: the discriminant is the SURFACE (upload / storage / secret-backend), not the runtime (Deno vs Vercel Edge). Single-line frontmatter edit, no colon+space (THI-326 trap), guarded by src/test/agentFrontmatter.test.ts (21/21 green). Co-Authored-By: Claude Opus 4.8 --- .claude/agents/supabase-backend-auditor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/agents/supabase-backend-auditor.md b/.claude/agents/supabase-backend-auditor.md index 0ad37f0..2d7b00b 100644 --- a/.claude/agents/supabase-backend-auditor.md +++ b/.claude/agents/supabase-backend-auditor.md @@ -1,6 +1,6 @@ --- name: supabase-backend-auditor -description: Audit sécurité des surfaces backend Supabase au-delà des tables/RPC — Edge Functions (runtime Deno, secret handling, JWT verify, BOLA, SSRF, CORS), Storage buckets (RLS policies, naming path-traversal, public/private), et validation file upload (MIME spoofing, magic bytes, zip slip, XXE, decompression bomb, oversized, executable/SVG-XSS). Tests empiriques via curl + JWT (PAS de dépendance MCP — fonctionne en sous-agent). Gate-zero AVANT toute PR touchant `supabase/functions/*`, une policy `storage.objects`, du code d'upload fichier, OU toute PR rendant du contenu uploadé par l'utilisateur (screenshot/description) dans une UI admin/teacher (ex. Sprint 2.C Étape 4 — gate H1 MIME-spoof — magic-bytes serveur + rendu `` JSX-only, jamais `.text()`/``/``). Créé avant Sprint 2.C Étape 3 (Edge Function Resend) + Phase X3b (import curriculum) — pattern gate-zero pré-chantier (cf. lti-auditor, prompt-guardrail-auditor). Premier run 01/06/2026 sur le formulaire support — prod SÛRE, H1 MIME-spoof confirmé empiriquement (atténué tant que le rendu reste ``). +description: Audit sécurité des surfaces backend Supabase au-delà des tables/RPC — Edge Functions (runtime Deno, secret handling, JWT verify, BOLA, SSRF, CORS), Storage buckets (RLS policies, naming path-traversal, public/private), et validation file upload (MIME spoofing, magic bytes, zip slip, XXE, decompression bomb, oversized, executable/SVG-XSS). Tests empiriques via curl + JWT (PAS de dépendance MCP — fonctionne en sous-agent). Gate-zero AVANT toute PR touchant `supabase/functions/*`, une policy `storage.objects`, du code d'upload fichier, OU toute PR rendant du contenu uploadé par l'utilisateur (screenshot/description) dans une UI admin/teacher (ex. Sprint 2.C Étape 4 — gate H1 MIME-spoof — magic-bytes serveur + rendu `` JSX-only, jamais `.text()`/``/``). Créé avant Sprint 2.C Étape 3 (Edge Function Resend) + Phase X3b (import curriculum) — pattern gate-zero pré-chantier (cf. lti-auditor, prompt-guardrail-auditor). Premier run 01/06/2026 sur le formulaire support — prod SÛRE, H1 MIME-spoof confirmé empiriquement (atténué tant que le rendu reste ``). Élargi 02/06/2026 — déclenche AUSSI sur toute route `api/*` (quel que soit le runtime, Vercel Edge OU Deno) qui lit/écrit du contenu uploadé OU manipule un secret backend (RESEND_API_KEY, SERVICE_ROLE) ; le discriminant est la SURFACE (upload/storage/secret-backend), pas le runtime (ex. `api/support/notify.ts` THI-319 = route Vercel Edge hors `supabase/functions/*`, pleinement dans mon scope secret/BOLA/injection-email). tools: Read, Grep, Glob, Bash model: opus ---