
Claude Skill, который проверяет ваши проекты на наличие неправильных настроек RLS, раскрытых ключей, обходов аутентификации и уязвимостей хранилища. 27 антипаттернов, взятых из CVE-2025-48757 и 10 исследований по безопасности. Безопасно для использования в production.
Навык Claude, который проверяет безопасность ваших бэкендов баз данных.
Вставьте его в Claude Code, Cursor или любое окружение на базе Claude. Скажите «audit my database» и получите исчерпывающий отчёт по безопасности с точным кодом исправлений — за минуты, а не дни.
Были взломаны более 170 приложений Lovable. 20,1 млн строк подверглись утечке среди стартапов YC. Около 87 000 экземпляров MongoDB оставались уязвимыми для MongoBleed (CVE-2025-14847, CISA KEV). 1,8 млн паролей Firebase утекли в результате одного инцидента 2025 года. 45% кода, сгенерированного ИИ, содержат уязвимости из OWASP Top 10. Database Sentinel проверяет, действительно ли ваша конфигурация безопасности работает — а не просто ли она присутствует.
Database Sentinel выполняет 7-этапный аудит безопасности для любого используемого вами бэкенда:
tx=rollback, канарные коллекции, опциональный детектор MongoBleed)Межбэкендное рассуждение выявляет проблемы, которые пропускают сканеры одного бэкенда (например, идентификатор Firebase Auth UID, которому доверяет API Postgres без проверки JWT).
Ранее Database Sentinel назывался Supabase Sentinel (один бэкенд). Переименование произошло во время Фазы 1 расширения на несколько бэкендов. Прокладка обратной совместимости compat/supabase-sentinel/ сохраняет старое имя навыка как минимум до следующего минорного релиза — существующие пользователи не видят регрессии.
Клонируйте навык в каталог навыков вашего проекта или в центральный:
git clone https://github.com/Farenhytee/database-sentinel.git ~/claude-skills/database-sentinel
Затем спросите у Claude:
Audit my database
Database Sentinel обнаружит, какой бэкенд(ы) использует ваш проект, выполнит соответствующие аудиты и сформирует единый отчёт. Если присутствуют несколько бэкендов (Firebase Auth + Postgres и т.д.), отчёт будет включать раздел межбэкендных взаимодействий после выхода Фазы 6.
Если вы хотите провести аудит только конкретного бэкенда, спросите явно:
Audit my Supabase project
Audit my MongoDB instance
Диспетчер сузит область.
Скопируйте содержимое SKILL.md и соответствующего backends/<name>/workflow.md в системную подсказку. Пройдите 7 шагов, используя свои учётные данные.
Сетевой зонд MongoBleed (backends/mongodb/mongobleed-probe.md) содержит детектор на основе одного пакета, который подтверждает эксплуатируемость в рантайме — проверено на mongo:7.0.20 (уязвим) и mongo:7.0.28 (исправлен). Он read-only, защищён двумя опциональными подтверждениями и никогда не извлекает содержимое.
╔════════════════════════════════════════════════════════╗
║ АУДИТ БЕЗОПАСНОСТИ SENTINEL ║
╠════════════════════════════════════════════════════════╣
║ Бэкенды: supabase, mongodb ║
║ Сканировано: 2026-04-30 14:30 UTC ║
║ Оценка: 0/100 🔴 ║
║ Итого: 2 бэкенда, 8 находок (3К / 4В / 1С) ║
╚════════════════════════════════════════════════════════╝
─────────────────────────────────────────────────────────
Supabase 35/100 🔴
─────────────────────────────────────────────────────────
🔴 КРИТИЧЕСКИЙ — public.users: RLS выключена [SB-001]
Риск: Любой пользователь интернета может читать всю вашу таблицу users.
Атака: Откройте DevTools браузера → скопируйте анонимный ключ → curl к API → выгрузите
все email, имена и метаданные.
Доказательство: curl возвращает [{"id":"...","email":"[email protected]",...}]
Источник: CVE-2025-48757 / Splinter 0013_rls_disabled_in_public
Исправление:
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);
─────────────────────────────────────────────────────────
MongoDB 0/100 🔴
─────────────────────────────────────────────────────────
🔴 КРИТИЧЕСКИЙ — mongod 7.0.20: MongoBleed (CVE-2025-14847) [MG-SH-001]
Риск: Один TCP-пакет раскрывает фрагменты памяти MongoDB —
включая учётные данные, запросы и данные документов — без
необходимости входа.
Атака: Публичный PoC доступен с 26 декабря 2025; CISA KEV. Повторные
запросы постепенно сливают всё больше рабочего набора.
Доказательство: buildInfo.version = "7.0.20" (уязвим; исправлен в 7.0.28)
сжатие zlib включено (по умолчанию): true
Активный зонд вернул: уязвим (opCode=2012, 163 байта)
Источник: CVE-2025-14847 / CISA KEV / Обновление безопасности MongoDB Server, декабрь 2025
Исправление:
Обновитесь до 7.0.28+. Временное смягчение, если обновление заблокировано:
net.compression.compressors = "snappy,zstd" в mongod.conf
✅ ПРОХОДИТ — Supabase: orders, payments, invoices, subscriptions
database-sentinel/
├── SKILL.md # Диспетчер — обнаруживает бэкенды, направляет аудиты (~2K токенов)
├── DECISIONS.md # Зафиксированные архитектурные решения (D1-D4 + замены)
├── core/
│ ├── workflow.md # Универсальный 7-этапный рабочий процесс аудита
│ ├── detection.md # Обнаружение бэкендов + JSON-манифест
│ ├── scoring.md # Веса для каждого бэкенда, минимальная агрегация
│ ├── reporting.md # Унифицированный формат отчёта (текст + JSON)
│ └── credentials.md # Обработка публичных и привилегированных ключей
├── backends/
│ ├── supabase/ # Фаза 1 — реализована
│ │ ├── workflow.md # 7-этапный аудит, адаптированный для Supabase
│ │ ├── audit-queries.md # 20 SQL-запросов для интроспекции схемы
│ │ ├── anti-patterns.md # 27 паттернов (SB-001..SB-027)
│ │ └── fix-templates.md # Шаблоны исправлений SQL (7 паттернов RLS и др.)
│ └── mongodb/ # Фаза 2 — реализована
│ ├── workflow.md # 7-этапный аудит, адаптированный для MongoDB
│ ├── introspection.md # mongosh + Atlas Admin API + сканирование IaC
│ ├── anti-patterns.md # 20 паттернов (MG-SH-001..014, MG-AT-001..006)
│ ├── mongobleed-probe.md # Безопасный детектор CVE-2025-14847 (один пакет)
│ ├── fix-templates.md # Матрица версий + mongod.conf + валидаторы + Atlas TF
│ └── test-recipe.md # Полный рецепт end-to-end тестирования (только документы)
├── compat/
│ └── supabase-sentinel/ # Прокладка обратной совместимости (принудительно backend=supabase)
│ └── SKILL.md
├── references/
│ ├── vibe-coding-context.md # CVE-2025-48757, исследования утечек — межбэкендные
│ └── cve-feed.md # Межбэкендный список CVE (базовый MongoBleed)
├── assets/
│ └── ci/
│ ├── github-action-supabase.yml # 1 задача — аудит безопасности
│ └── github-action-mongodb.yml # 3 задачи — статический IaC, живой аудит, зонд MongoBleed
├── README.md # этот файл
├── LICENSE # MIT
├── DECISIONS.md
└── sentinel-implementation-plan.md # План расширения на несколько бэкендов
Как работает прогрессивное раскрытие: Claude загружает только SKILL.md (~2K токенов) плюс core/* изначально. Когда обнаружение идентифицирует бэкенд, загружается соответствующий backends/<name>/workflow.md и справочные файлы по требованию. Аудит только Supabase не загружает содержимое MongoDB; будущие расширения Firebase / Postgres / MySQL следуют тому же шаблону.
Для каждого реализованного бэкенда поставляется шаблон рабочего процесса CI:
| Бэкенд | Рабочий процесс | Режимы задач |
|---|---|---|
| Supabase | assets/ci/github-action-supabase.yml |
Рабочие процессы запускаются при изменениях соответствующих файлов (миграции, файлы правил, IaC, манифесты зависимостей), по еженедельному cron (понедельник 06:00 UTC) и при ручном запуске. Они публикуют комментарии в PR, загружают артефакты отчётов и проваливают сборку при критических находках.
Просто спросите: «Set up continuous security monitoring for this project.»
База антипаттернов Database Sentinel основана на:
$where в populate-match MongooseПолный набор ссылок см. в references/vibe-coding-context.md и references/cve-feed.md.
Database Sentinel спроектирован безопасным для использования на production:
pg_tables, pg_policies, getCmdLineOpts и т.д.). Никаких DDL или DML по умолчанию.Prefer: tx=rollback (родной PostgREST; данные не изменяются)BEGIN…ROLLBACK (транзакционный DDL)abortTransaction()/_sentinel_probe/{random}_sentinel_probe + DROP DATABASE (опционально, деструктивно — явное предупреждение)Вклад приветствуется. Наиболее ценными являются:
backends/<name>/anti-patterns.md с указанием критичности, запроса для обнаружения, кода исправления и подтверждения из реального мира (CVE / утечка / Splinter / CIS).backends/<name>/fix-templates.md.backends/mongodb/mongobleed-probe.md).backends/mongodb/ и backends/supabase/. План реализации (sentinel-implementation-plan.md) содержит контракт для каждого.git checkout -b add-new-pattern)mysql_native_password для 8.4+)BACKENDS.md, график устаревания прокладки supabase-sentinelnpx database-sentinel audit для окружений без ClaudeНазвание навыка supabase-sentinel по-прежнему работает через прокладку compat/supabase-sentinel/. Она принудительно ограничивает аудит только Supabase и выдаёт результат, неотличимый от v1. Дата прекращения поддержки: TBD; как минимум до следующего минорного релиза.
MIT — используйте как угодно, в коммерческих целях или иным образом.
Создано для эпохи vibe-кодинга.
Потому что «оно работает» и «оно безопасно» — две совершенно разные вещи.
| Фаза | Бэкенд | Статус |
|---|
| 1 | Supabase | ✅ выпущено |
| 2 | MongoDB (самостоятельный + Atlas) | ✅ выпущено |
| 3 | Firebase (Firestore / RTDB / Storage / Functions / Remote Config) | 🚧 запланировано |
| 4 | PostgreSQL (собственный, включая pgBouncer) | 🚧 запланировано |
| 5 | MySQL (собственный) | 🚧 запланировано |
| 6 | Анализ межбэкендных взаимодействий | 🚧 запланировано |
| 7 | Дистрибуция + доработка | 🚧 запланировано |
| Критичность | Паттерн | Что это |
|---|
| 🔴 КРИТИЧЕСКИЙ | SB-001 RLS_DISABLED | Таблицы без безопасности на уровне строк — полностью открыты в интернет |
| 🔴 КРИТИЧЕСКИЙ | SB-002 SERVICE_ROLE_EXPOSED | Ключ service_role во фронтенд-коде — обходит ВСЕ механизмы безопасности |
| 🔴 КРИТИЧЕСКИЙ | SB-003 POLICIES_BUT_NO_RLS | Политики написаны, но RLS никогда не включена — ложное ощущение безопасности |
| 🔴 КРИТИЧЕСКИЙ | SB-005 WRITE_USING_TRUE | INSERT/UPDATE/DELETE с USING(true) — любой может изменять |
| 🟠 ВЫСОКИЙ | SB-006 USING_TRUE_SELECT | Все строки читаемы анонимными пользователями в чувствительных таблицах |
| 🟠 ВЫСОКИЙ | SB-007 VIEW_NO_SECURITY_INVOKER | Представления обходят RLS, выполняются как суперпользователь |
| 🟠 ВЫСОКИЙ | SB-008 SECURITY_DEFINER_EXPOSED | Функции в публичной схеме обходят RLS, вызываемы через API |
| 🟠 ВЫСОКИЙ | SB-009 USER_METADATA_IN_POLICY | Политики используют изменяемые пользователем метаданные — эскалация привилегий |
| 🟠 ВЫСОКИЙ | SB-010 UPDATE_NO_WITHCHECK | Политики UPDATE без WITH CHECK — риск массового присваивания |
| 🟠 ВЫСОКИЙ | SB-011 GHOST_AUTH | Регистрация с неподтверждённым email предоставляет аутентифицированные сессии |
| 🟠 ВЫСОКИЙ | SB-012 STORAGE_NO_RLS | Бакет хранилища без политик контроля доступа |
| 🟠 ВЫСОКИЙ | SB-013 JWT_SECRET_EXPOSED | Утечка секрета подписи JWT — можно подделать токен любого пользователя |
| 🟡 СРЕДНИЙ | + ещё 15 паттернов | См. backends/supabase/anti-patterns.md |
| Критичность | Паттерн | Что это |
|---|
| 🔴 КРИТИЧЕСКИЙ | MG-SH-001 MongoBleed (CVE-2025-14847, CISA KEV) | Раскрытие памяти кучи до аутентификации через поддельный сжатый пакет. На момент раскрытия было затронуто ~87 000 экземпляров. |
| 🔴 КРИТИЧЕСКИЙ | MG-SH-002 Аутентификация отключена | mongod запущен без аутентификации — поверхность атаки для вымогательского ПО Meow |
| 🔴 КРИТИЧЕСКИЙ | MG-SH-003 mongod, доступный из интернета | --bind_ip_all + порт 27017 доступен — в паре с MG-SH-002 ведёт к полной компрометации |
| 🔴 КРИТИЧЕСКИЙ | MG-AT-001 Белый список Atlas 0.0.0.0/0 | Кластер Atlas доступен из любой точки интернета |
| 🟠 ВЫСОКИЙ | MG-SH-004 Обход аутентификации с localhost + выполнение в контейнере | enableLocalhostAuthBypass true + доступ к docker exec |
| 🟠 ВЫСОКИЙ | MG-SH-005 JavaScript на стороне сервера включён | Доступны $where / $function / mapReduce — поверхность для NoSQL-RCE |
| 🟠 ВЫСОКИЙ | MG-SH-006 TLS не требуется | Трафик передаётся в открытом виде |
| 🟠 ВЫСОКИЙ | MG-SH-007 Привилегированная роль у пользователя приложения | Приложение подключается как root / dbAdminAnyDatabase и т.д. |
| 🟠 ВЫСОКИЙ | MG-SH-008 Самоизменяемый документ роли | findByIdAndUpdate(id, req.body) + без валидатора + поле роли |
| 🟠 ВЫСОКИЙ | MG-AT-002 Функция Atlas как прокси для БД | NoSQL-инъекция через HTTPS — распространилась после устаревания Data API |
| 🟠 ВЫСОКИЙ | MG-AT-003 Atlas Data API всё ещё в коде | Устарел 30 сентября 2025; сломан И, вероятно, заменён на менее проверяемые Functions |
| 🟡 СРЕДНИЙ | MG-SH-009 Mongoose < 8.9.5 | CVE-2024-53900 / CVE-2025-23061 — инъекция $where в populate-match |
| 🟡 СРЕДНИЙ | + ещё 8 паттернов | См. backends/mongodb/anti-patterns.md |
| Одна задача — аудит безопасности (интроспекция + динамические зонды) |
| MongoDB | assets/ci/github-action-mongodb.yml | Три задачи — статическое сканирование IaC (всегда выполняется, без секретов), живой аудит (ограничен vars.AUDIT_LIVE == 'true'), зонд MongoBleed (ограничен vars.MONGOBLEED_PROBE == 'true' + подтверждение владения) |
| Бэкенд | Встроенный инструмент | Что он пропускает | Database Sentinel покрывает |
|---|
| Supabase | Splinter (16 линтов) | Действительно ли политики предотвращают несанкционированный доступ | Живое тестирование tx=rollback каждого пути CRUD для каждой таблицы |
| Supabase | Splinter | Ghost-auth (обход подтверждения email) | Зонд регистрации с доменом .invalid |
| Supabase | Splinter | Массовое присваивание через UPDATE без WITH CHECK + чувствительные столбцы | Перекрёстная проверка имён столбцов с формой политики |
| Supabase | Splinter | Сканирование кодовой базы | Обнаруживает ключи service_role во фронтенд-коде, жёстко закодированные JWT, записанные .env файлы |
| MongoDB | Atlas Advisor | Подтверждение уязвимости MongoBleed в рантайме | Детектор на уровне протокола (один пакет; проверено на 7.0.20 + 7.0.28) |
| MongoDB | Atlas Advisor | Самоизменяемые документы ролей | Перекрёстная проверка шаблонов исходного кода и валидаторов коллекций |
| MongoDB | Trivy / Aikido | Конфигурация Atlas (белые списки, IAM, CMK) | Прямой аудит через Atlas Admin API |
| MongoDB | mongoaudit (заброшен в 2018) | Актуальность в 2025+ | Поддерживаемый каталог паттернов с CVE 2025–2026 |
.invalid. Тестовые email используют зарезервированные домены RFC 6761, которые не могут получать почту.