Vibe Check · Nº 02 · Agosto 2026
Tu Supabase está abierto de par en par (y no lo sabes)
Una casilla sin marcar deja tu base de datos abierta a cualquiera. Cómo comprobarlo en 15 minutos.
En enero, una red social se lanzó con mucho ruido. En tres días le sacaron un millón y medio de claves. No fue un hackeo de película. Fue una casilla sin marcar.
La red se llamaba Moltbook. Estaba montada con Supabase, como media internet ahora mismo. Un equipo de seguridad (Wiz) miró el código que la app manda al navegador y encontró la clave de la base de datos en cuestión de minutos. Con esa clave, cualquiera podía leer y escribir en toda la base de datos. Sin registrarse. Sin permiso.
Se llevaron 1,5 millones de tokens, 35.000 correos y más de 4.000 conversaciones privadas. Algunas llevaban claves de OpenAI en texto plano.
Por qué pasó (no fue mala suerte)
Cuando montas una app con Supabase, tu base de datos tiene una clave pública, la anon key. Se llama pública porque va en el navegador a propósito: es normal que esté ahí. Lo que decide si tus datos están a salvo no es esa clave. Es una cosa que se llama RLS, Row Level Security. El RLS es el portero: dice quién puede leer y escribir cada fila.
El problema: cuando creas una tabla en Supabase, el RLS viene apagado por defecto. Y la IA que te monta la app casi nunca lo enciende. Así que la app funciona perfecta, se ve preciosa, y tiene la puerta abierta de par en par sin que tú lo sepas.
No es un caso raro. En 2025, un investigador (Matt Palmer) revisó apps hechas con Lovable y encontró 170 con la base de datos entera accesible sin login, por exactamente esto. Se le puso nombre y todo: CVE-2025-48757.
El chequeo de 15 minutos
- Uno. Entra en tu proyecto de Supabase, ve a Table Editor y mira tus tablas. Si alguna tiene el candado abierto o gris, el RLS está apagado. Esa tabla está abierta.
- Dos. Abre tu app en el navegador, pulsa F12, ve a la pestaña Network y recarga. Vas a ver tu clave anon y la URL de tu API. Es normal que estén ahí. Cópialas.
- Tres. La prueba de fuego: con esa clave, intenta pedir los datos de una tabla que no debería ser pública, sin haber iniciado sesión. Si te devuelve filas, está abierta a todo el mundo. Si te dice que no tienes permiso, vas bien.
- Cuatro. Ve a Authentication, Policies, y enciende el interruptor "Enable RLS on new tables". Así las tablas que crees a partir de ahora nacen cerradas.
Cómo se arregla
Se enciende el RLS tabla por tabla:
ALTER TABLE tu_tabla ENABLE ROW LEVEL SECURITY;Ojo con el orden. Encender el RLS sin escribir después las reglas de quién entra deja la tabla cerrada a cal y canto, y tu app deja de funcionar hasta que definas esas reglas. Hazlo bien: enciendes el RLS, escribes la política mínima (por ejemplo, cada usuario solo ve sus filas), y pruebas que la app sigue viva.
Este es, de lejos, el fallo que más me encuentro. No cuesta dinero arreglarlo. Cuesta saber que hay que mirarlo. Si tienes una app con Supabase y nunca has tocado esto, míralo hoy. Y si prefieres que lo mire yo, en danielbrosed.com tienes los precios y cómo trabajo.
¿Tienes una app que nadie ha revisado?
En danielbrosed.com tienes los precios y cómo trabajo. Sin discurso de venta: una llamada de 30 minutos y una propuesta con precio cerrado.
Fuentes
