Claude Info
Безопасность

Supabase Sentinel

Farenhytee/supabase-sentinel

Claude Skill для комплексного аудита Supabase-проектов: проверяет RLS-политики, утечки ключей, обходы авторизации и уязвимости хранилища. 27 антипаттернов на основе CVE-2025-48757 и 10 исследований. Безопасен для продакшена.

Установка

terminal
bash
git clone https://github.com/Farenhytee/supabase-sentinel.git

README

🛡️ Supabase Sentinel

Claude Skill для аудита безопасности вашего Supabase-проекта.

Добавьте его в Claude Code, Cursor или любую среду на базе Claude. Скажите «проверь мой Supabase-проект» — и получите подробный отчёт о безопасности с готовым SQL для исправлений за минуты, а не дни.

Более 170 приложений Lovable были взломаны. 20,1 млн строк оказались открыты в стартапах YC. 45% кода, сгенерированного ИИ, содержит уязвимости из OWASP Top 10. Встроенный Security Advisor Supabase лишь проверяет, включён ли RLS — Supabase Sentinel проверяет, работает ли он на самом деле.


Что делает скилл

Supabase Sentinel выполняет 7-этапный аудит безопасности любого Supabase-проекта:

  1. Сканирует кодовую базу на предмет открытых ключей service_role, захардкоженных JWT и секретов, попавших в git
  2. Интроспектирует схему базы данных — таблицы, RLS-политики, представления, функции, бакеты хранилища
  3. Сопоставляет с 27 известными паттернами уязвимостей, взятыми из CVE-2025-48757, 10 опубликованных исследований и тысяч задокументированных взломов
  4. Динамически зондирует API с помощью техники Prefer: tx=rollback (данные не изменяются, безопасно для продакшена)
  5. Тестирует ghost auth — могут ли злоумышленники создавать неподтверждённые аккаунты и получать доступ к данным?
  6. Формирует оценочный отчёт безопасности с понятными объяснениями и конкретными сценариями атак
  7. Генерирует готовый SQL для исправлений — скопировал, вставил, готово

Быстрый старт

Вариант 1: Claude Code / Cursor

Скопируйте папку скилла в свой проект:

bash
# Клонировать в директорию skills вашего проекта
git clone https://github.com/Farenhytee/supabase-sentinel.git .claude/skills/supabase-sentinel

# Или в общую директорию skills
git clone https://github.com/Farenhytee/supabase-sentinel.git ~/claude-skills/supabase-sentinel

Затем просто спросите Claude:

Audit my Supabase project for security issues

Claude автоматически обнаружит учётные данные Supabase из .env-файлов, выполнит полный аудит и представит отчёт.

Вариант 2: Claude.ai (с computer use)

  1. Скачайте репозиторий как ZIP
  2. Загрузите его в диалог Claude.ai с включённым computer use
  3. Напишите: «Use the Supabase Sentinel skill to audit my Supabase project»
  4. Укажите URL и ключи Supabase по запросу

Вариант 3: Вручную (любой AI-ассистент)

Скопируйте содержимое SKILL.md в системный промпт или диалог, затем следуйте рабочему процессу, указав учётные данные Supabase.


Что обнаруживает скилл

Критические уязвимости

ПаттернОписание
RLS_DISABLEDТаблицы без Row-Level Security — полностью открыты для интернета
SERVICE_ROLE_EXPOSEDКлюч service_role во фронтенд-коде — обходит ВСЮ защиту
POLICIES_BUT_NO_RLSПолитики написаны, но RLS так и не включён — ложное ощущение безопасности
WRITE_USING_TRUEINSERT/UPDATE/DELETE с USING(true) — любой может изменять данные

Высокая степень риска

ПаттернОписание
USING_TRUE_SELECTВсе строки читаемы анонимными пользователями в чувствительных таблицах
VIEW_NO_SECURITY_INVOKERПредставления обходят RLS, выполняясь от имени суперпользователя
SECURITY_DEFINER_EXPOSEDФункции в публичной схеме обходят RLS и доступны через API
USER_METADATA_IN_POLICYПолитики ссылаются на метаданные, изменяемые пользователем — эскалация привилегий
UPDATE_NO_WITHCHECKПолитики UPDATE без WITH CHECK — риск массового присвоения
GHOST_AUTHНеподтверждённые email-регистрации дают аутентифицированные сессии
STORAGE_NO_RLSБакет хранилища без политик контроля доступа
JWT_SECRET_EXPOSEDУтечка секрета подписи JWT — можно подделать токен любого пользователя

Средняя степень риска

ПаттернОписание
RLS_NO_POLICIESRLS включён, но политики отсутствуют — весь доступ молча блокируется (баг)
POLICY_NO_ROLE_SCOPEПолитика применяется ко всем ролям, включая анонимных
MULTIPLE_PERMISSIVEНесколько разрешающих политик объединяются через OR — побеждает наиболее мягкая
RLS_PERFORMANCEauth.uid() не кешируется — деградация производительности, потенциальный DoS
PUBLIC_BUCKETБакет хранилища публично доступен без авторизации
SENSITIVE_COLUMNSСтолбцы с именами password, api_key и т.п. открыты через API
+ ещё 9 паттерновПолный список — в references/anti-patterns.md

Пример вывода

╔════════════════════════════════════════════════════════╗ ║ SUPABASE SENTINEL SECURITY REPORT ║ ╠════════════════════════════════════════════════════════╣ ║ Project: https://myapp.supabase.co ║ ║ Scanned: 2026-03-15 14:30 UTC ║ ║ Score: 35/100 🔴 ║ ║ Summary: 12 tables, 8 policies, 7 findings ║ ╚════════════════════════════════════════════════════════╝ 🔴 CRITICAL — users: RLS Disabled Risk: Anyone on the internet can read your entire users table Attack: Open browser DevTools → copy anon key → curl the API → dump all emails, names, metadata Proof: curl returns [{"id":"...","email":"user@real.com",...}] Fix: ALTER TABLE public.users ENABLE ROW LEVEL SECURITY; CREATE POLICY "users_select_own" ON public.users FOR SELECT TO authenticated USING ((SELECT auth.uid()) = id); 🟠 HIGH — profiles: SELECT policy uses USING(true) Risk: All user profiles are readable by anyone, including anonymous users Attack: Enumerate all profiles via the API to harvest user data ... ✅ PASSING: orders, payments, invoices, subscriptions (4 tables properly secured)

Структура файлов

supabase-sentinel/ ├── SKILL.md # Основной скилл — 7-этапный рабочий процесс аудита (333 строки) ├── references/ │ ├── audit-queries.md # 20 SQL-запросов для интроспекции схемы │ ├── anti-patterns.md # 27 паттернов уязвимостей с уровнем риска, методом обнаружения и исправлением │ ├── fix-templates.md # SQL-шаблоны исправлений — 7 паттернов RLS, хранилище, авторизация, превентивные меры │ └── vibe-coding-context.md # CVE-2025-48757, исследования, анализ платформ ├── assets/ │ └── ...

Похожие скиллы