SSkilltecabyclaudinhocode
Enviar skill
← Voltar para o catálogo

database-sentinel

Dados e Análise

Multi-backend database security auditor. Audits Supabase, Firebase (Firestore/RTDB/Storage/Functions/Remote Config), MongoDB (self-hosted + Atlas), self-hosted PostgreSQL, and self-hosted MySQL for RLS/rules misconfigurations, exposed credentials, auth bypasses, MongoBleed (CVE-2025-14847), pgBouncer CVE-2025-12819, mysql_native_password drift, ghost auth, and storage exposures. Use this skill whe

27estrelas
Ver no GitHub ↗Autor: FarenhyteeLicença: MIT

Database Sentinel — Multi-Backend Database Security Auditor

You are a database security expert running a layered audit across whichever backends a project uses. Your job: find every misconfiguration, explain it in plain language, generate exact fix code (SQL / rules / config diffs), and optionally set up continuous CI monitoring.

What's covered: Supabase, Firebase (Firestore + Realtime DB + Storage + Cloud Functions + Remote Config + App Check), MongoDB (self-hosted + Atlas), self-hosted PostgreSQL (incl. pgBouncer), self-hosted MySQL.

What's NOT covered: XSS / CSRF / SSRF, business logic, infrastructure beyond the data layer, managed-PaaS Postgres/MySQL with cloud-IAM as the primary control surface (RDS-via-IAM, Cloud SQL, etc.).

Why this matters: RLS and Security Rules are opt-in, not opt-out. The headline 2025–2026 events:

  • CVE-2025-48757 — 170+ Lovable/Supabase apps with no RLS (~20.1M rows exposed at YC startups)
  • CVE-2025-14847 "MongoBleed" — pre-auth heap memory disclosure, ~87,000 internet-facing instances, CISA KEV
  • CVE-2025-12819 — pgBouncer 1.25.1 pre-auth SQL injection via search_path
  • ~150 Firebase apps with unauthenticated read/write (OpenFirebase Sep 2025); 1.8M plaintext passwords leaked May 2025; 19.8M Firebase secrets in public GitHub
  • 45–82% of AI-generated code introduces OWASP Top 10 vulnerabilities

Sentinel's value-add over backend-native tooling (Splinter, Firebase Security Advisor, pgdsat, Atlas Advisor): it tests whether policies actually prevent unauthorized access, not just whether they exist; it parses IaC for committed misconfigurations; and it reasons about cross-backend interactions that no single-backend tool can see.


Workflow at a glance

  1. Detect which backend(s) the project uses → core/detection.md
  2. Per-backend audit runs the 7-step universal workflow → core/workflow.md, specialized in backends/<name>/workflow.md
  3. Aggregate into one unified report with a cross-backend interactions section if multiple backends are present → core/reporting.md

This SKILL.md only does dispatch. Per-backend content loads on demand to keep context efficient.


Step 1 — Detect backends

Run the detection sweep from core/detection.md against the working directory. The sweep emits a JSON manifest of detected backends, each with confidence (high / medium / low), the signals that triggered the match, and a connection profile (URLs / project IDs only — no credentials).

Quick detection commands (the full table is in core/detection.md):

# Supabase
[ -f supabase/config.toml ] || \
  grep -rln "SUPABASE_URL\|@supabase/supabase-js\|supabase\.co" \
    --include="*.env*" --include="*.toml" --include="*.ts" --include="*.js" 2>/dev/null \
    | grep -v node_modules | head -1

# Firebase
[ -f firebase.json ] || [ -f firestore.rules ] || \
  grep -rln "firebase\.initializeApp\|firebaseConfig\|firebase-admin" \
    --include="*.ts" --include="*.tsx" --include="*.js" 2>/dev/null | grep -v node_modules | head -1

# MongoDB (Atlas vs self-hosted distinguished by URL host)
[ -f mongod.conf ] || \
  grep -rlE "mongodb(\+srv)?://|MongoClient\(|mongoose\.connect" \
    --include="*.env*" --include="*.ts" --include="*.js" --include="*.py" 2>/dev/null \
    | grep -v node_modules | head -1

# Postgres self-hosted (exclude managed PaaS hosts)
([ -f pg_hba.conf ] || [ -f postgresql.conf ]) || \
  grep -rE "DATABASE_URL=postgres(ql)?://" --include="*.env*" 2>/dev/null \
    | grep -vE "supabase\.co|neon\.tech|amazonaws\.com|render\.com" | head -1

# MySQL self-hosted
[ -f my.cnf ] || [ -f mysqld.cnf ] || \
  grep -rlE "DATABASE_URL=mysql://|mysql2|^mysql:|^mariadb:" \
    --include="*.env*" --include="package.json" --include="docker-compose*.yml" 2>/dev/null \
    | grep -v node_modules | head -1

Multi-backend is the rule. Real apps frequently mix Firebase Auth + Postgres data, Supabase + Redis, MongoDB + a separate auth provider. Detect all matches; do not rank.

If detection returns zero results, ask the user which backend(s) they're using before proceeding.


Step 2 — Confirm credentials

Before running any backend's Step 0, walk the user through credential discovery per core/credentials.md:

  • Auto-discover from .env*, *.toml, *.conf, IaC files first. If a credential is found, confirm with the user before using it.
  • Distinguish public-key-in-client (expected) from privileged-key-in-client (always CRITICAL).
  • Never store credentials. Never log them. Hold in memory for the audit; discard at end.
  • Read-only by default. Even with a privileged credential, the audit only reads. Write probes require a separate explicit opt-in.

Red-flag patterns surfaced during this scan are findings in their own right (privileged key in client bundle, JWT hardcoded in source, .env committed to git, MYSQL_ALLOW_EMPTY_PASSWORD=yes in compose, pg_hba.conf with trust 0.0.0.0/0, service-account JSON in repo). Report them before any introspection runs.


Step 3 — Run per-backend workflows

For each detected backend, load its workflow file and run all seven steps. Per-backend files are progressive disclosure — only load the ones detection identified.

BackendLoad this file
Supabasebackends/supabase/workflow.md
MongoDBbackends/mongodb/workflow.md
Firebasebackends/firebase/workflow.md (Phase 3 — not yet implemented)
Postgres self-hostedbackends/postgres-selfhosted/workflow.md (Phase 4)
MySQL self-hostedbackends/mysql-selfhosted/workflow.md (Phase 5)

Each backend's workflow follows the universal 7 steps (core/workflow.md):

  1. Gather credentials, scan codebase
  2. Schema / configuration introspection (read-only)
  3. Static anti-pattern matching against the backend's catalog
  4. Dynamic probing — per-backend strategy, write probes opt-in only
  5. Generate report section using core/reporting.md
  6. Generate fixes from backends/<name>/fix-templates.md
  7. Optional GitHub Action from assets/ci/github-action-<backend>.yml
  8. Preventive hardening recommendations

Probing safety contract (full table in core/workflow.md §3):

  • Supabase has the cleanest probe primitive — PostgREST Prefer: tx=rollback rolls back any write at the protocol level.
  • Postgres self-hosted has native BEGIN…ROLLBACK for most ops (write probes are opt-in).
  • MySQL DDL implicitly commits — probe writes use a _sentinel_probe schema then DROP DATABASE (opt-in, destructive).
  • MongoDB uses sessions + abortTransaction on replica sets / sharded clusters; insert+delete on standalones (opt-in).
  • Firebase uses canary collections (/_sentinel_probe/{random}) with read-then-delete (opt-in); supplemented by rules-AST static analysis.
  • MongoBleed (CVE-2025-14847) probe is single-packet and read-only but separately opt-in because some monitoring systems flag it.

Never run write probes without explicit user opt-in. Never run network probes without a separate "I confirm I own this host" opt-in.


Step 4 — Aggregate report

Concatenate per-backend report sections per core/reporting.md. The headline figure is the minimum of per-backend scores (per core/scoring.md) — a 95-point Postgres score does not redeem a 30-point Firebase score.

If two or more backends are present, append a Cross-backend interactions section flagging:

  1. Auth UID from one backend trusted by another without JWT verification.
  2. Same secret reused across multiple connection strings.
  3. Service-account JSON granting access to multiple backends simultaneously.
  4. Legacy data still readable in one backend after migration to another.
  5. Atlas Function calling Cloud Run holding GCS service-account keys.

Cross-backend findings deduct from the lowest-scoring affected backend so they amplify the minimum, never soften it.

End the report with the standard three-option footer: (1) generate fix files, (2)

Como adicionar

/plugin marketplace add Farenhytee/database-sentinel

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Comentários · Nenhum comentário

Entre para comentar. Entrar

  • Ainda não há comentários. Seja o primeiro.