
Habilidade do Claude que audita seus projetos em busca de configurações incorretas de RLS, chaves expostas, bypasses de autenticação e vulnerabilidades de armazenamento. 27 anti-padrões originados do CVE-2025-48757 e de 10 estudos de segurança. Seguro para produção.
Uma Skill do Claude que audita seus backends de banco de dados em busca de vulnerabilidades de segurança.
Coloque-a no Claude Code, no Cursor ou em qualquer ambiente com tecnologia Claude. Diga "audite meu banco de dados" e receba um relatório abrangente de segurança com o código de correção exato — em minutos, não em dias.
Mais de 170 apps Lovable foram violados. 20,1 milhões de linhas foram expostas em startups do YC. ~87.000 instâncias MongoDB ficaram vulneráveis ao MongoBleed (CVE-2025-14847, CISA KEV). 1,8 milhão de senhas do Firebase vazaram em um único incidente de 2025. 45% do código gerado por IA introduz vulnerabilidades do OWASP Top 10. O Database Sentinel testa se sua configuração de segurança realmente funciona — não apenas se ela existe.
O Database Sentinel realiza uma auditoria de segurança em 7 etapas nos backend(s) que seu projeto utiliza:
tx=rollback, coleções canário, detector opt-in de MongoBleed)O raciocínio entre backends detecta problemas que scanners de backend único não percebem (por exemplo, um UID do Firebase Auth considerado confiável por uma API Postgres sem verificação JWT).
O Database Sentinel era anteriormente o Supabase Sentinel (backend único). A renomeação aconteceu durante a Fase 1 da expansão multi-backend. Um shim de compatibilidade com versões anteriores em compat/supabase-sentinel/ preserva o nome antigo da skill por pelo menos a próxima versão menor — usuários existentes não veem nenhuma regressão.
Clone a skill para o diretório de skills do seu projeto, ou para um diretório central:
git clone https://github.com/Farenhytee/database-sentinel.git ~/claude-skills/database-sentinel
Depois peça ao Claude:
Audit my database
O Database Sentinel detectará qual(is) backend(s) seu projeto usa, executará as auditorias relevantes e produzirá um relatório unificado. Se houver múltiplos backends (Firebase Auth + dados Postgres, etc.), o relatório incluirá uma seção de interações entre backends quando a Fase 6 for lançada.
Se você quiser auditar apenas um backend específico, peça explicitamente:
Audit my Supabase project
Audit my MongoDB instance
O dispatcher restringe o escopo.
Copie o conteúdo de SKILL.md mais o backends/<name>/workflow.md relevante para o seu prompt de sistema. Percorra as 7 etapas com suas credenciais.
A sonda de rede MongoBleed (backends/mongodb/mongobleed-probe.md) inclui um detector de pacote único que confirma a explorabilidade em tempo de execução — verificado contra mongo:7.0.20 (vulnerável) e mongo:7.0.28 (corrigido). Ela é somente leitura, exige duas confirmações opt-in e nunca extrai conteúdo.
╔════════════════════════════════════════════════════════╗
║ SENTINEL SECURITY AUDIT ║
╠════════════════════════════════════════════════════════╣
║ Backends: supabase, mongodb ║
║ Scanned: 2026-04-30 14:30 UTC ║
║ Score: 0/100 🔴 ║
║ Summary: 2 backends, 8 findings (3C / 4H / 1M) ║
╚════════════════════════════════════════════════════════╝
─────────────────────────────────────────────────────────
Supabase 35/100 🔴
─────────────────────────────────────────────────────────
🔴 CRITICAL — public.users: RLS Disabled [SB-001]
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, and metadata.
Proof: curl returns [{"id":"...","email":"[email protected]",...}]
Source: CVE-2025-48757 / Splinter 0013_rls_disabled_in_public
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);
─────────────────────────────────────────────────────────
MongoDB 0/100 🔴
─────────────────────────────────────────────────────────
🔴 CRITICAL — mongod 7.0.20: MongoBleed (CVE-2025-14847) [MG-SH-001]
Risk: A single TCP packet leaks fragments of MongoDB's memory —
including credentials, queries, and document data — without
requiring any login.
Attack: Public PoC available since Dec 26 2025; CISA KEV. Repeated
requests progressively dump more of the working set.
Proof: buildInfo.version = "7.0.20" (vulnerable; patched in 7.0.28)
zlib compression enabled (default): true
Active probe returned: vulnerable (opCode=2012, 163 bytes)
Source: CVE-2025-14847 / CISA KEV / MongoDB Server Security Update Dec 2025
Fix:
Upgrade to 7.0.28+. Same-day mitigation if upgrade is blocked:
net.compression.compressors = "snappy,zstd" in mongod.conf
✅ PASSING — Supabase: orders, payments, invoices, subscriptions
database-sentinel/
├── SKILL.md # Dispatcher — detects backends, routes audits (~2K tokens)
├── DECISIONS.md # Locked architecture decisions (D1-D4 + supersessions)
├── core/
│ ├── workflow.md # Universal 7-step audit workflow
│ ├── detection.md # Backend detection + JSON manifest
│ ├── scoring.md # Per-backend weights, min-aggregation
│ ├── reporting.md # Unified report format (text + JSON)
│ └── credentials.md # Public-vs-privileged key handling
├── backends/
│ ├── supabase/ # Phase 1 — implemented
│ │ ├── workflow.md # 7-step audit specialized for Supabase
│ │ ├── audit-queries.md # 20 SQL queries for schema introspection
│ │ ├── anti-patterns.md # 27 patterns (SB-001..SB-027)
│ │ └── fix-templates.md # SQL fix templates (7 RLS patterns + more)
│ └── mongodb/ # Phase 2 — implemented
│ ├── workflow.md # 7-step audit specialized for MongoDB
│ ├── introspection.md # mongosh + Atlas Admin API + IaC scan
│ ├── anti-patterns.md # 20 patterns (MG-SH-001..014, MG-AT-001..006)
│ ├── mongobleed-probe.md # Safe CVE-2025-14847 single-packet detector
│ ├── fix-templates.md # Version matrix + mongod.conf + validators + Atlas TF
│ └── test-recipe.md # Document-only end-to-end test recipe
├── compat/
│ └── supabase-sentinel/ # Backwards-compat shim (forces backend=supabase)
│ └── SKILL.md
├── references/
│ ├── vibe-coding-context.md # CVE-2025-48757, breach studies — cross-backend
│ └── cve-feed.md # Cross-backend CVE list (MongoBleed seeded)
├── assets/
│ └── ci/
│ ├── github-action-supabase.yml # 1 job — security audit
│ └── github-action-mongodb.yml # 3 jobs — static IaC, live audit, MongoBleed probe
├── README.md # this file
├── LICENSE # MIT
├── DECISIONS.md
└── sentinel-implementation-plan.md # Multi-backend expansion roadmap
Como funciona a revelação progressiva: o Claude carrega inicialmente apenas SKILL.md (~2K tokens) mais core/*. Quando a detecção identifica um backend, o backends/<name>/workflow.md correspondente e os arquivos de referência sob demanda são carregados. Uma auditoria somente de Supabase não paga o custo do conteúdo de MongoDB; futuras extensões de Firebase / Postgres / MySQL seguem o mesmo padrão.
Cada backend implementado inclui um modelo de workflow de CI:
| Backend | Workflow | Modos de job |
|---|---|---|
| Supabase | assets/ci/github-action-supabase.yml |
Os workflows são acionados por mudanças relevantes em arquivos (migrações, arquivos de regras, IaC, manifestos de dependências), cron semanal (segunda-feira 06:00 UTC) e dispatch manual. Eles postam comentários em PRs, enviam artefatos de relatório e fazem o build falhar quando há achados críticos.
Basta pedir: "Configure o monitoramento contínuo de segurança para este projeto."
O banco de dados de anti-padrões do Database Sentinel é baseado em:
$where em populate-match do MongooseVeja references/vibe-coding-context.md e references/cve-feed.md para o conjunto completo de citações.
O Database Sentinel foi projetado para ser seguro para uso em produção:
pg_tables, pg_policies, getCmdLineOpts, etc.). Nenhum DDL ou DML por padrão.Prefer: tx=rollback (nativo do PostgREST; zero dados modificados)BEGIN…ROLLBACK (DDL transacional)abortTransaction()/_sentinel_probe/{random}_sentinel_probe + DROP DATABASE (opt-in, destrutivo — aviso explícito)Contribuições são bem-vindas. As contribuições mais valiosas:
backends/<name>/anti-patterns.md relevante com gravidade, consulta de detecção, código de correção e evidência do mundo real (CVE / violação / Splinter / CIS).backends/<name>/fix-templates.md.backends/mongodb/mongobleed-probe.md).backends/mongodb/ e backends/supabase/. O plano de implementação (sentinel-implementation-plan.md) tem o contrato para cada uma.git checkout -b add-new-pattern)mysql_native_password para 8.4+)BACKENDS.md, cronograma de descontinuação do shim supabase-sentinelnpx database-sentinel audit para ambientes sem ClaudeO nome da skill supabase-sentinel ainda funciona via shim de compatibilidade em compat/supabase-sentinel/. Ele força a auditoria apenas para Supabase e produz uma saída indistinguível da v1. Data de descontinuação: a definir; por pelo menos a próxima versão menor.
MIT — use como quiser, comercialmente ou não.
Construído para a era do vibe-coding.
Porque "funciona" e "é seguro" são duas coisas muito diferentes.
| Fase | Backend | Status |
|---|
| 1 | Supabase | ✅ implementado |
| 2 | MongoDB (auto-hospedado + Atlas) | ✅ implementado |
| 3 | Firebase (Firestore / RTDB / Storage / Functions / Remote Config) | 🚧 planejado |
| 4 | PostgreSQL (auto-hospedado, incluindo pgBouncer) | 🚧 planejado |
| 5 | MySQL (auto-hospedado) | 🚧 planejado |
| 6 | Análise de interação entre backends | 🚧 planejado |
| 7 | Distribuição + polimento | 🚧 planejado |
| Gravidade | Padrão | O quê |
|---|
| 🔴 CRÍTICO | SB-001 RLS_DISABLED | Tabelas sem Row-Level Security — totalmente expostas à internet |
| 🔴 CRÍTICO | SB-002 SERVICE_ROLE_EXPOSED | chave service_role em código frontend — ignora TODA a segurança |
| 🔴 CRÍTICO | SB-003 POLICIES_BUT_NO_RLS | Políticas escritas, mas RLS nunca ativado — falsa segurança |
| 🔴 CRÍTICO | SB-005 WRITE_USING_TRUE | INSERT/UPDATE/DELETE com USING(true) — qualquer um pode modificar |
| 🟠 ALTO | SB-006 USING_TRUE_SELECT | Todas as linhas legíveis por usuários anônimos em tabelas sensíveis |
| 🟠 ALTO | SB-007 VIEW_NO_SECURITY_INVOKER | Views ignoram o RLS, executam como superusuário |
| 🟠 ALTO | SB-008 SECURITY_DEFINER_EXPOSED | Funções no schema público ignoram o RLS, chamáveis via API |
| 🟠 ALTO | SB-009 USER_METADATA_IN_POLICY | Políticas referenciam metadados modificáveis pelo usuário — escalonamento de privilégios |
| 🟠 ALTO | SB-010 UPDATE_NO_WITHCHECK | Políticas de UPDATE sem WITH CHECK — risco de atribuição em massa |
| 🟠 ALTO | SB-011 GHOST_AUTH | Cadastros com e-mail não confirmado concedem sessões autenticadas |
| 🟠 ALTO | SB-012 STORAGE_NO_RLS | Bucket de storage sem políticas de controle de acesso |
| 🟠 ALTO | SB-013 JWT_SECRET_EXPOSED | Segredo de assinatura JWT vazado — pode forjar o token de qualquer usuário |
| 🟡 MÉDIO | + 15 padrões a mais | Veja backends/supabase/anti-patterns.md |
| Gravidade | Padrão | O quê |
|---|
| 🔴 CRÍTICO | MG-SH-001 MongoBleed (CVE-2025-14847, CISA KEV) | Divulgação de memória heap pré-autenticação via pacote compactado malicioso. ~87 mil instâncias expostas na divulgação. |
| 🔴 CRÍTICO | MG-SH-002 Auth desativado | mongod executando sem autenticação — superfície de ataque do ransomware Meow |
| 🔴 CRÍTICO | MG-SH-003 mongod exposto à internet | --bind_ip_all + 27017 acessível — combinado com MG-SH-002 para comprometimento total |
| 🔴 CRÍTICO | MG-AT-001 allowlist do Atlas 0.0.0.0/0 | Cluster Atlas acessível de qualquer lugar da internet |
| 🟠 ALTO | MG-SH-004 bypass de auth localhost + container exec | enableLocalhostAuthBypass true + acesso via docker exec |
| 🟠 ALTO | MG-SH-005 JS no servidor habilitado | $where / $function / mapReduce acessíveis — superfície de NoSQL-RCE |
| 🟠 ALTO | MG-SH-006 TLS não exigido | Tráfego em texto puro na rede |
| 🟠 ALTO | MG-SH-007 Papel privilegiado no usuário do app | App se conecta como root / dbAdminAnyDatabase etc. |
| 🟠 ALTO | MG-SH-008 Documento de role automodificável | findByIdAndUpdate(id, req.body) + sem validador + campo role |
| 🟠 ALTO | MG-AT-002 Function do Atlas como pass-through de banco de dados | Injeção NoSQL via HTTPS — proliferou após a descontinuação da Data API |
| 🟠 ALTO | MG-AT-003 Atlas Data API ainda no código | Descontinuada em 30 de setembro de 2025; quebrada E provavelmente migrada para Functions menos auditadas |
| 🟡 MÉDIO | MG-SH-009 Mongoose < 8.9.5 | CVE-2024-53900 / CVE-2025-23061 — injeção $where em populate-match |
| 🟡 MÉDIO | + 8 padrões a mais | Veja backends/mongodb/anti-patterns.md |
| Job único — auditoria de segurança (introspecção + sondas dinâmicas) |
| MongoDB | assets/ci/github-action-mongodb.yml | Três jobs — varredura estática de IaC (sempre executa, sem segredos), auditoria ao vivo (controlada por vars.AUDIT_LIVE == 'true'), sonda MongoBleed (controlada por vars.MONGOBLEED_PROBE == 'true' + confirmação de propriedade) |
| Backend | Ferramenta integrada | O que ela deixa passar | O Database Sentinel cobre |
|---|
| Supabase | Splinter (16 lints) | Se as políticas realmente impedem acesso não autorizado | Teste ao vivo tx=rollback de cada caminho CRUD contra cada tabela |
| Supabase | Splinter | Ghost-auth (bypass de confirmação de e-mail) | Sonda de cadastro com TLD .invalid |
| Supabase | Splinter | Atribuição em massa via UPDATE sem WITH CHECK + colunas sensíveis | Cruza nomes de colunas com o formato da política |
| Supabase | Splinter | Varredura da base de código | Encontra chaves service_role em código frontend, JWTs hardcoded, arquivos .env commitados |
| MongoDB | Atlas Advisor | Confirmação em tempo de execução do MongoBleed | Detector de pacote único em nível de protocolo (verificado contra 7.0.20 + 7.0.28) |
| MongoDB | Atlas Advisor | Documentos de role automodificáveis | Verificação cruzada de padrão de origem + validador de coleção |
| MongoDB | Trivy / Aikido | Configuração específica do Atlas (allowlists, IAM, CMK) | Auditoria direta via Atlas Admin API |
| MongoDB | mongoaudit (abandonado em 2018) | Ativo em 2025+ | Catálogo de padrões mantido com CVEs de 2025–2026 |
.invalid. Os e-mails de teste usam domínios reservados pela RFC 6761, que não podem receber mensagens.