Seguridad de reglas · Firestore · Realtime DB · Supabase

Prueba que un usuario
lee los datos de otro.

Los demás detectan la puerta abierta. FUGA prueba el bug que ninguno ve: reglas que exigen login pero no comprueban el dueño, y dejan que cualquier usuario acceda a los datos ajenos. Lo demostramos, lo reparamos y lo re-verificamos.

Open source · MIT · 23 tests en verde

Riesgo 100/100
medicloud.app/api/pacientes/doc-2847
EXPUESTO / read público
{
  "nombre": "Ana Ríos",
  "cedula": "52.481.903",
  "email": "ana.rios@correo.com",
  "diagnostico": "Diabetes tipo 2",
  "tipoSangre": "O+",
  "numeroTarjeta": "4111 1111 1111 1111",
  "cvv": "847",
  "ownerId": "uid_ana_2847"
}
Verificado · DENY
Funciona con Firebase Cloud Firestore Cloud Storage Rules

El Problema

Una sola línea deja toda tu base de datos legible y escribible por cualquier persona en Internet:

match /{document=**} { allow read, write: if true; }

Historias clínicas, tarjetas de crédito, cédulas, mensajes privados… todo expuesto. Una de las causas #1 de fuga de datos en apps con Firebase.

Los linters existentes solo dicen “esto parece inseguro” — el desarrollador lo ignora porque no ve el impacto.

Cómo funciona

Cuatro pasos. Loop cerrado. Sin fisuras.

1

SCAN

Análisis estático de tus reglas. Detecta patrones permisivos, asigna severidad y calcula un puntaje de riesgo 0–100.

2

PROVE

Un atacante anónimo ejecuta el acceso real y captura el JSON exfiltrable. No opina: demuestra.

3

FIX

Genera reglas de mínimo privilegio. El LLM propone, el evaluador valida. Nada de reglas alucinadas.

4

VERIFY

Re-ataca con las reglas nuevas. Solo se acepta el fix si el atacante queda en DENY.

No detecta. Demuestra.

Pruébalo ahora

Pega tus reglas de Firestore y observa la fuga en tiempo real.

SCAN

PROVE

FIX


VERIFY

El bug que ningún linter ve

Fuga entre usuarios

La regla exige estar autenticado — pero no comprueba que seas el dueño del dato. Cualquier usuario con cuenta lee o edita los registros de los demás. Es la clase de fallo que expuso apps de Supabase en masa (CVE-2025-48757), y no lo detecta la coincidencia de patrones: hay que ejecutar el ataque con dos identidades.

La regla parece segura

match /perfiles/{userId} {
  allow read, write:
    if request.auth != null;
}

Un atacante anónimo obtiene DENY. Un linter clásico dice «seguro» y sigue de largo.

FUGA lo prueba con dos cuentas

A Alice es dueña del registro (cédula, tarjeta, teléfono).
M Mallory es otra cuenta cualquiera — sin ser admin.
Mallory leyó y modificó el registro de Alice. Fuga probada.

FUGA genera el fix acotado al dueño y re-lanza el ataque para confirmar que Mallory ya no entra.

Otros escáneres vs FUGA

Todos detectan la puerta abierta. Solo FUGA prueba que un usuario puede leer los datos de otro.

CapacidadOtrosFUGA
Prueba fugas ENTRE USUARIOS (IDOR: un usuario lee datos de otro)
Detecta acceso abierto
Muestra los datos exfiltrados
Genera el fix de mínimo privilegio
Re-verifica el fix
Corre sin backend / Java
Open source (MIT)

Arquitectura

Cuatro piezas que se combinan de forma no trivial.

Evaluador de reglas propio

Oráculo portátil en TypeScript. Decide ALLOW/DENY sin Java ni emulador. Corre en CI y en el navegador.

RAG por colección

Infiere esquema y PII del código cliente. Distingue una fuga en /pagos de una en /logs.

LLM pluggable

Amazon Bedrock / Ollama / plantilla determinista. El LLM propone, el evaluador dispone. Sin alucinaciones.

Servidor MCP

Tools fuga_scan, fuga_prove, fuga_fix para Kiro, Claude y Cursor.

Potenciado por Amazon Bedrock & construido con Kiro

Amazon Bedrock como motor LLM en la nube para la reescritura inteligente de reglas. Desarrollado con el flujo spec-driven de Kiro: specs, steering, agente y hooks. Se integra como servidor MCP para agentes de código.

Prueba FUGA ahora

Ve tus datos filtrarse, aplica el fix y verifica que la fuga desapareció.