← BACK TO UPDATES

POR QUÉ TODO PROYECTO LOVABLE NECESITA PRUEBA DE SEGURIDAD

Construir con IA es increíblemente rápido, pero ¿tus proyectos Lovable son seguros? Esto es todo lo que necesitas saber para proteger tus aplicaciones generadas por IA.

0
Apps escaneadas
0
Vulnerabilidades encontradas
0
Desarrolladores confían en VibeEval

PRUEBA TU PROYECTO LOVABLE AHORA

Introduce la URL de tu app Lovable en producción para verificar vulnerabilidades.

Dato rápido: Más del 76% de las aplicaciones web tiene al menos una vulnerabilidad seria. Cuando estás construyendo rápido con IA, la prueba de seguridad se vuelve aún más crítica.

El riesgo escondido en el desarrollo con IA

Entiéndeme bien — Lovable es increíble. Se pueden construir aplicaciones enteras en horas que antes tomaban semanas. Pero hay algo de lo que nadie habla: cuando vas a esa velocidad, la seguridad suele quedarse atrás.

Las herramientas de seguridad tradicionales no fueron hechas para código generado por IA. Dejan pasar los patrones y vulnerabilidades que emergen cuando una IA escribe buena parte de tu aplicación. Por eso construimos el Scanner de Seguridad Lovable.

¿Qué hace diferentes a los proyectos Lovable?

Los asistentes de código con IA como Lovable revolucionaron la forma de construir aplicaciones web. Pero también introducen consideraciones de seguridad únicas que los scanners tradicionales no capturan:

  • Vulnerabilidades por default: la IA a veces genera patrones de código que funcionan perfecto pero contienen fallos sutiles de seguridad
  • Puntos ciegos en integraciones: cuando la IA conecta servicios y APIs distintos, pueden surgir huecos de seguridad entre componentes
  • Riesgos de iteración rápida: la velocidad del desarrollo con IA puede hacer que la deuda de seguridad crezca más rápido de lo que una revisión manual puede detectar

Problemas reales que encontramos en proyectos Lovable

Después de escanear muchas apps Lovable, identificamos varios patrones comunes que los desarrolladores deben observar:

BYPASSES DE AUTENTICACIÓN

Flujos de autenticación incompletos que permiten acceso no autorizado a rutas protegidas.

EXPOSICIÓN DE CLAVES DE API

Credenciales sensibles accidentalmente expuestas en código client-side o en repositorios públicos.

FILTRACIÓN DE DATOS

Datos de usuario o información interna expuestos sin querer a través de respuestas de API.

FALLOS DE VALIDACIÓN

Validación ausente permite que entradas maliciosas lleguen al backend.

Los 6 flujos de vibe coding que más se rompen

“Vibe coding” — entregar una app funcional conversando con una IA y nunca leer la mitad del código generado — tiene una forma predecible. En más de 1.430 escaneos Lovable, los mismos seis flujos responden por la mayoría de los críticos. Si endurecieras solo estos, eliminarías la mayoría de los bugs que impactan producción en apps generadas por IA.

01 / SIGNUP + SESIÓN

Anon key usada en llamadas de usuario logueado. JWT guardado en localStorage sin refresh. Reset de contraseña que envía email a direcciones controladas por el atacante porque el endpoint de update confía en el cliente.

02 / SUBIDA DE ARCHIVOS

Bucket de Supabase Storage marcado como público. Sin validación de MIME. Sin prefijo de ruta por usuario. Resultado: cualquier usuario sube a la carpeta de otro, o sube contenido ejecutable a un bucket de "images".

03 / GATE DE FUNCIÓN DE PAGO

Check del plan de Stripe vive solo en el componente React. El endpoint real `/api/generate` o la lectura de tabla no tiene cláusula `WHERE plan = 'pro'`. Todo usuario free llega directo a todo endpoint de pago.

04 / DASHBOARD ADMIN

Ruta protegida por `if (user.email === 'me@x.com') showAdmin()`. La tabla `admin_audit_logs` no tiene RLS. Cualquiera que adivine la ruta o llame al endpoint REST se vuelve admin.

05 / EDGE FUNCTIONS

Service-role key hardcodeada en una función llamable desde el navegador. O la función confía en un parámetro `user_id` en lugar de extraerlo del JWT. Escalación total de privilegios en un solo request.

06 / UPDATE DE PERFIL

Política de UPDATE usa `USING (auth.uid() = user_id)` pero no tiene `WITH CHECK`. Los usuarios pueden cambiar su propio `role` a `admin`, `plan` a `enterprise` o `user_id` al de otro. Test: intenta `PATCH /profiles?id=eq.me { role: "admin" }`.

Cada uno de estos flujos produce el mismo síntoma en nuestros reportes: UI limpia, app funcionando y un hallazgo crítico en el endpoint detrás. El scanner recorre los seis automáticamente. Para más contexto sobre por qué estos patrones aparecen en código generado por IA, ver Vibe Coding Security Checks y el baseline RLS del caso de la beauty blogger.

Mala configuración de RLS: la vulnerabilidad #1

Después de escanear 1.430+ aplicaciones Lovable, una vulnerabilidad sobresale por encima de todas: políticas de Row Level Security (RLS) ausentes o mal configuradas. Este problema sigue disparándose en proyectos Lovable nuevos.

Lovable usa Supabase como base de datos. Supabase expone un endpoint público de API que cualquiera puede llamar directamente. Sin políticas de RLS, nada impide a un atacante leer cada fila de tu BD, modificar datos de otros usuarios o borrar registros completamente.

Por qué esto sigue pasando:
  • Defaults de Supabase: las tablas nuevas se crean con RLS deshabilitado por default. La IA de Lovable no siempre lo activa.
  • Brecha de complejidad: escribir políticas de RLS correctas requiere entender políticas de PostgreSQL, y el código generado por IA frecuentemente se equivoca.
  • Fallo silencioso: todo funciona perfectamente sin RLS durante el desarrollo. La vulnerabilidad solo importa cuando usuarios reales están en la plataforma.
  • Muchas tablas: cada tabla nueva necesita sus propias políticas de RLS. A medida que los proyectos crecen, se olvidan tablas.

Los cuatro checks de RLS que toda tabla necesita

RLS no es un solo interruptor. Es una política por operación, por tabla. Deja una pasar y la superficie de ataque sigue abierta de par en par. Nuestro scanner corre las cuatro en cada tabla pública que descubre:

Operación Qué envía el scanner Qué pasa Qué falla
SELECT anon GET /rest/v1/<table>?select=* 401 o filas con alcance Dump completo de tabla
INSERT anon POST /rest/v1/<table> con fila de probe 401 o rechazo por política Fila escrita
UPDATE anon PATCH /rest/v1/<table>?id=eq.<row> 401 o cero filas afectadas Fila modificada
DELETE anon DELETE /rest/v1/<table>?id=eq.<row> 401 o cero filas afectadas Fila borrada

El error común: los desarrolladores prueban SELECT, ven que está bloqueado y lanzan. Las escrituras quedan abiertas. Lo vemos en ~30% de las apps que “habilitaron RLS”.

Políticas rotas que parecen correctas

Estas son las políticas de RLS que más señalamos — compilan, la app funciona y la tabla sigue expuesta:

-- MAL: sin WITH CHECK el usuario puede INSERT filas de cualquiera
CREATE POLICY "insert own" ON posts
  FOR INSERT USING (auth.uid() = user_id);

-- MAL: UPDATE solo con USING; el usuario actualiza su propia fila
-- y cambia el user_id al de otra persona al mismo tiempo
CREATE POLICY "update own" ON posts
  FOR UPDATE USING (auth.uid() = user_id);

-- MAL: lee las propias + marcadas como públicas, sin filtro
-- de columna — campos sensibles en filas "públicas" se filtran
CREATE POLICY "read public or own" ON posts
  FOR SELECT USING (is_public OR auth.uid() = user_id);

-- MAL: el clásico fix "solo para que funcione"
CREATE POLICY "allow all" ON posts FOR ALL USING (true);

Las versiones corregidas — los patrones que aguantan cuando se prueban:

-- BIEN: INSERT con WITH CHECK ata la nueva fila al que llama
CREATE POLICY "insert own" ON posts
  FOR INSERT WITH CHECK (auth.uid() = user_id);

-- BIEN: UPDATE exige que la fila actual pertenezca al que llama
-- Y que la nueva versión también (impide transferencia de dueño)
CREATE POLICY "update own" ON posts
  FOR UPDATE USING (auth.uid() = user_id)
              WITH CHECK (auth.uid() = user_id);

-- BIEN: DELETE con alcance de dueño
CREATE POLICY "delete own" ON posts
  FOR DELETE USING (auth.uid() = user_id);

-- BIEN: SELECT explícito, sin ambigüedad
CREATE POLICY "read own" ON posts
  FOR SELECT USING (auth.uid() = user_id);

Para columnas con PII (email, teléfono, stripe_customer_id), prefiere una view con columnas restringidas en lugar de grants a nivel de columna — es más difícil configurar mal y más fácil de auditar.

Prueba tu RLS en 30 segundos

No necesitas nuestro scanner para un primer repaso. Abre tu app Lovable en producción, agarra la URL de Supabase y la anon key de la pestaña Network y corre:

# Sustituye por tu proyecto + anon key + tabla
SUPA="https://<project>.supabase.co"
KEY="<anon_key>"
TABLE="profiles"

# Probe de lectura — debe venir vacío o 401 sin login
curl "$SUPA/rest/v1/$TABLE?select=*&limit=5" \
  -H "apikey: $KEY" -H "Authorization: Bearer $KEY"

# Probe de escritura — debe ser 401 o rechazo por política
curl -X POST "$SUPA/rest/v1/$TABLE" \
  -H "apikey: $KEY" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":"rls-probe-delete-me"}'

Si vienen filas o la escritura pasa, tienes un crítico. Ejecuta el Supabase RLS Checker gratis para el reporte completo por tabla, o pega la URL en el scanner al inicio de esta página para la auditoría Lovable completa (auth, storage, edge functions y claves, además de RLS).

Cuando RLS no alcanza

RLS frena la anon key. No frena:

  • Edge Functions usando la service-role key — estas ignoran RLS por completo. Cualquier error lógico dentro de una función es lectura/escritura completa de la BD.
  • JWTs filtrados — si se filtra el JWT de un usuario logueado (XSS, un gist público, una captura de pantalla), RLS sirve alegremente al atacante lo que ese usuario vería.
  • Storage — Storage tiene reglas parecidas a RLS por bucket y por objeto. Se configuran por separado y, en apps Lovable, suelen quedar como “public bucket”.
  • Vistas y funciones de BD — una función SECURITY DEFINER corre con privilegios del creador, no del que llama. Si recibe un ID provisto por el usuario y confía en él, RLS se vuelve irrelevante.

Nuestro scanner prueba las cuatro. Para entender el modelo de política subyacente, ver la guía de RLS de Supabase y la checklist de seguridad de Supabase.

Cómo funciona el Scanner de Seguridad Lovable

Nuestro scanner fue hecho específicamente para entender la arquitectura de Lovable. Esto es lo que pasa cuando escaneas tu proyecto:

  1. Descubrimiento automático: crawleamos tu aplicación para entender estructura, rutas y funcionalidad
  2. Pruebas con IA: 13 agentes de IA especializados prueban escenarios de ataque específicos para aplicaciones web
  3. Detección de vulnerabilidades: identificamos problemas de seguridad, desde malas configuraciones básicas hasta bypasses complejos de autenticación
  4. Reportes accionables: explicaciones claras de los problemas encontrados y pasos específicos para corregir

Más allá del escaneo: cobertura de seguridad completa

El Scanner de Seguridad Lovable no es solo sobre encontrar vulnerabilidades. Es una solución de seguridad completa:

  • Pruebas multi-navegador: asegura que tu app funcione con seguridad en distintos navegadores
  • Verificación de RLS de Supabase: prueba end-to-end de tus políticas de Row Level Security
  • Monitoreo diario: escaneo continuo para detectar problemas nuevos conforme tu app evoluciona
  • Prevención de filtración de datos: detecta información sensible que pueda estar expuesta
  • Protección de tokens de API: evita la exposición accidental de credenciales sensibles
  • Checks de listos para lanzar: validación exhaustiva de seguridad pre-deploy
Tip pro para devs Lovable: ejecuta un escaneo de seguridad antes de cada deploy importante. Los 5 minutos que toma pueden salvarte de un incidente que arruina tu reputación y cuesta miles arreglar.

Lo que están encontrando los desarrolladores

Entre las 5.711 vulnerabilidades encontradas en 1.430+ apps escaneadas, este es el ranking de los problemas más comunes:

  1. RLS ausente en SELECT — Crítico. Presente en 85% de los escaneos.
  2. RLS ausente en INSERT/UPDATE/DELETE — Crítico. Presente en 51% de los escaneos. Normalmente sale junto con una política de SELECT funcional, por eso pasa desapercibido.
  3. Claves de API expuestas — Crítico. Presente en 62% de los escaneos. OpenAI, Anthropic, Stripe y Resend son las cuatro más filtradas.
  4. Bypasses de autenticación — Alto. Presente en 45% de los escaneos. Normalmente un route guard solo en el frontend.
  5. Validación de entrada ausente — Alto. Presente en 38% de los escaneos.
  6. Bucket de Storage público — Alto. Presente en 34% de las apps Lovable que usan Storage.
  7. Gates de función de pago solo en el frontend — Alto. Presente en 27% de las apps monetizadas.
  8. Service-role key en código cliente — Crítico. Raro (~4%), pero siempre es takeover total.

Empezar es simple

No necesitas ser experto en seguridad para proteger tus proyectos Lovable. Pega la URL de tu app en producción arriba. En minutos recibes un reporte exhaustivo de seguridad con recomendaciones accionables.

Empieza con un trial gratis de 14 días. Sin setup largo. Solo insights de seguridad reales para aplicaciones reales.

COMMON QUESTIONS

01
¿Lovable es seguro de usar?
Lovable es una plataforma legítima de código con IA, pero las apps construidas con él pueden contener vulnerabilidades — bypasses de autenticación, exposición de claves de API y filtraciones de datos. Siempre escanea tu app Lovable antes de publicarla.
Q&A
02
¿Qué problemas de seguridad son comunes en apps Lovable?
Los problemas comunes incluyen bypasses de autenticación, claves de API expuestas en el código client-side, filtración de datos vía respuestas de API y validación de entrada ausente. Son típicos de código generado por IA.
Q&A
03
¿Cómo escanear mi app Lovable en busca de vulnerabilidades?
Introduce la URL de tu app Lovable en producción en el scanner de VibeEval. 13 agentes de IA probarán fallos de seguridad en unos 60 segundos. Sin registro para el primer escaneo.
Q&A
04
¿Cuál es la vulnerabilidad más común en apps Lovable?
Políticas de Row Level Security (RLS) ausentes o mal configuradas son la vulnerabilidad #1 en apps Lovable. Sin RLS correcto, cualquier usuario puede leer, modificar o borrar datos de otros usuarios directamente por la API de Supabase.
Q&A
05
¿Cuántas apps Lovable han sido escaneadas en términos de seguridad?
Más de 1.430 aplicaciones Lovable han sido escaneadas por VibeEval, revelando más de 5.711 vulnerabilidades de seguridad. Los problemas más comunes son políticas de RLS ausentes, claves de API expuestas y bypasses de autenticación.
Q&A
06
¿Cómo verifico si mi RLS en Supabase está funcionando?
Abre la pestaña Network de tu app, copia la anon key y después haz curl directo al endpoint REST: `curl 'https://<project>.supabase.co/rest/v1/<table>?select=*' -H 'apikey: <anon>'`. Si vienen filas sin estar autenticado, el RLS está desactivado o la política está mal. El scanner de VibeEval lo hace para cada tabla automáticamente — incluidos probes de INSERT, UPDATE y DELETE, que la mayoría de los desarrolladores olvidan probar.
Q&A
07
¿RLS habilitado significa que mi tabla está segura?
No. RLS habilitado sin políticas devuelve cero filas para la anon key, pero también cero filas para tus usuarios logueados — así que los desarrolladores añaden una política permisiva `USING (true)` para 'hacerlo funcionar', lo cual efectivamente desactiva el RLS. RLS solo es seguro cuando cada política limita las filas explícitamente al que llama, típicamente vía `auth.uid() = user_id`, y cuando las políticas de INSERT usan `WITH CHECK`, no solo `USING`.
Q&A
08
¿Cuáles son los flujos de vibe coding que más se rompen?
Los seis flujos que más vemos rotos en apps Lovable son: (1) signup / gestión de sesión que filtra tokens, (2) subida de archivos a buckets públicos de Storage, (3) gate de función de pago impuesto solo en el frontend, (4) dashboard admin protegido por condicional de UI, (5) Edge Functions invocadas con la service-role key desde el navegador y (6) updates de perfil donde el usuario puede cambiar su propio `role` o `user_id`.
Q&A
09
¿Lovable puede corregir estas vulnerabilidades si se lo pido?
A veces. Lovable añade políticas de RLS si lo pides de forma específica — ej., 'habilita RLS en cada tabla pública y restringe lecturas a auth.uid() = user_id'. Pero a menudo escribe políticas que parecen correctas y no lo son, especialmente para INSERT (sin WITH CHECK) y UPDATE (sin segunda condición en la nueva fila). Siempre vuelve a ejecutar el escaneo después de que la IA diga que corrigió.
Q&A
10
¿Funciona para apps Lovable que no usan Supabase?
Sí. El scanner cubre Firebase, Neon, PlanetScale, backends REST/GraphQL directos y Edge Functions. Los checks de RLS solo corren cuando se detecta Supabase. Las pruebas de bypass de autenticación, exposición de claves de API, filtración de datos y validación de entrada corren en toda app Lovable, independientemente del backend.
Q&A
11
¿Es seguro ejecutar este escaneo contra mi app Lovable en producción?
Sí. El scanner es principalmente de lectura: prueba los mismos endpoints que un navegador real tocaría, con credenciales anon. Los probes de escritura (INSERT/UPDATE/DELETE) apuntan a tablas con marcadores de prueba detectables y se loguean claramente. Ningún dato de producción se exfiltra ni se almacena — solo registramos conteos y nombres de tabla.
Q&A

STOP GUESSING. SCAN YOUR APP.

Join the founders who shipped secure instead of shipped exposed. 14-day trial, no card.

START FREE SCAN