Informe de seguridad
https://meu-app.lovable.app
14 hallazgos encontrados
Esta nota es del alcance público — lo que un visitante alcanza sin login. No entran aquí el área logueada, lo que corre en el servidor, ni otros subdominios (api., staging., admin.). El alcance completo está más abajo.
- 24
- páginas visitadas
- 1010
- verificaciones ejecutadas
- 14
- hallazgos
Transparencia del trabajo
Lo que revisamos
Un barrido real, en un navegador de verdad: 24 páginas abiertas y 1010 verificaciones ejecutadas.
Páginas visitadas (24)
- https://meu-app.lovable.app/
- https://meu-app.lovable.app/login
- https://meu-app.lovable.app/cadastro
- https://meu-app.lovable.app/painel
- https://meu-app.lovable.app/conta
- https://meu-app.lovable.app/checkout
- https://meu-app.lovable.app/precos
- https://meu-app.lovable.app/sobre
- https://meu-app.lovable.app/contato
- https://meu-app.lovable.app/blog
- https://meu-app.lovable.app/blog/post-1
- https://meu-app.lovable.app/blog/post-2
- https://meu-app.lovable.app/termos
- https://meu-app.lovable.app/privacidade
- https://meu-app.lovable.app/faq
- https://meu-app.lovable.app/recuperar-senha
- https://meu-app.lovable.app/status
- https://meu-app.lovable.app/api/health
- https://meu-app.lovable.app/sitemap.xml
- https://meu-app.lovable.app/robots.txt
- https://api.meu-app.lovable.app/
- https://staging.meu-app.lovable.app/
- https://meu-app.lovable.app/assets/index.js
- https://meu-app.lovable.app/assets/vendor.js
Verificaciones por categoría
- Secretos expuestos320
- Cabeceras HTTP170
- Archivos sensibles120
- Almacenamiento en el navegador90
- Base de datos70
- DNS / correo60
- Bibliotecas de frontend50
- api40
- Cookies40
- CORS (orígenes cruzados)20
- Transporte / TLS18
- Resiliencia (CDN/WAF)12
Informe completo · US$ 49
Ya sabes qué está roto. Falta saber dónde.
El informe completo abre la prueba de cada uno de los 14 hallazgos: el archivo y la línea exactos, el código antes y después, el
- ✓ Dónde está cada falla — archivo, línea, endpoint
- ✓ Prompt de corrección por asistente + código antes/después
- ✓ Cómo verificar que la corrección funcionó
- ✓ Reprueba incluida: la segunda pasada no cuesta nada
- ✓ Informe exportable, para archivar o entregar a tu cliente
Garantía: si el informe pago no confirma ningún hallazgo alto o crítico, devolvemos los US$ 49.
Plan de acción
En este orden, y no en otro.
0→100
nota después de todo · ~6 h 45
la nota tiene techo; la porción de riesgo no
1Resolver hoy — es lo que abre la puerta
~4 h 10−93% del riesgo- Archivo .env expuesto20 min
- Secreto expuesto: Stripe30 min
- Clave service_role de Supabase expuesta35 min
- Base Firebase abierta45 min
- Cookie de sesión sin HttpOnly15 min
- Secreto expuesto: OpenAI25 min
- Bucket de archivos público40 min
- Dato personal en el navegador40 min
2Esta semana — cierra las rendijas
~1 h 45−5% del riesgo- DMARC ausente15 min
- Introspección de GraphQL abierta20 min
- Librería con falla conocida30 min
- Content-Security-Policy ausente40 min
3Cuando puedas — higiene y reputación
~50 min−1% del riesgo- Scripts sin verificación de integridad20 min
- Subdominios olvidados30 min
Estimaciones de orden de magnitud, para un dev que conoce el proyecto. La porción de riesgo y la proyección de la nota usan la misma tabla de peso del escaneo — así que el número aquí es lo que la reprueba mostrará.
Alcance de este análisis
Lo que se miró — y, con la misma claridad, lo que no.
Entró
- Las páginas públicas que el navegador alcanzó desde la dirección indicada
- Todo archivo que el sitio entrega al navegador — bundles, scripts, configuración
- Cabeceras de respuesta, cookies de sesión, política de CORS y la configuración de TLS
- Los registros DNS de correo del dominio (SPF y DMARC)
- Bibliotecas de frontend con falla pública conocida
- Archivos sensibles en rutas conocidas (.env, .git, copias de seguridad)
Quedó fuera
- Todo lo que solo existe después del login — no autenticamos en tu sitio
- El código que corre en el servidor: inyección de SQL, lógica de negocio, permisos entre usuarios
- Dependencias del servidor — desde afuera solo vemos lo que el navegador descarga
- Infraestructura fuera del sitio: puertos de base de datos, buckets, paneles en otros subdominios
- Lo que publiques después de este escaneo — la superficie cambia con cada deploy
- La prueba activa de la base de datos, que exige verificación del dominio
Ningún escaneo vuelve seguro un sistema — este cierra las puertas que están abiertas para quien llega de afuera, sin contraseña y sin conocimiento técnico, que es por donde ocurre la mayoría de los incidentes en apps nuevas. La superficie cambia con cada publicación: un escaneo es una foto, no un seguro.
Conformidad (indicativo)
Qué normas tocan estos hallazgos
Los hallazgos de este informe mapean controles de los siguientes frameworks:
Mapeo indicativo para orientar la corrección — no es una evaluación ni certificación de conformidad, y no sustituye una auditoría.
Clave service_role de Supabase expuesta
La clave maestra de tu base está en el código que cualquier visitante descarga. Con ella, un extraño lee, edita y borra todo — ignorando cualquier regla de acceso que pusiste.
Datos sensibles (como el token de login) están guardados en el navegador de una forma que otro script puede leer — y robar el acceso.
Secreto expuesto: Stripe
La clave secreta de Stripe quedó en el sitio. Permite emitir reembolsos, sacar tu lista de clientes y tocar tu cuenta de pagos — todo a tu nombre.
Una contraseña o clave de acceso quedó visible en el código del sitio. Quien abra la página la encuentra — y puede usar tu cuenta, gastar en tu nombre o leer tus datos.
Archivo .env expuesto
El archivo .env está abierto al público. Ahí están todas tus contraseñas y claves a la vez — el mapa del tesoro servido en bandeja.
Un archivo que debería ser privado (configuración, copia de seguridad) está abierto en internet. Es como dejar la llave debajo del tapete, a la vista de todos.
Base Firebase abierta
Tu base Firebase responde sin login. Cualquiera lee los datos de tus usuarios y, si la escritura también está abierta, los edita — sin contraseña, sin barrera.
La base de datos puede accederse directo, sin las reglas de permiso. En la práctica, cualquiera puede leer (o cambiar) los datos de todos los usuarios.
Cookie de sesión sin HttpOnly
La cookie que mantiene al usuario logueado puede leerla un script de la página. Con eso basta para que un atacante entre como si fuera él.
La cookie que mantiene al usuario logueado no tiene protección. Eso facilita robar la sesión y entrar al sistema como si fuera él.
Dato personal en el navegador
Los datos personales de tus clientes — tarjeta, identificación — quedan en el navegador, al alcance de cualquier script. Es una fuga y una multa de privacidad esperando pasar.
Datos sensibles (como el token de login) están guardados en el navegador de una forma que otro script puede leer — y robar el acceso.
Bucket de archivos público
Un bucket de archivos (S3/Storage) es listable. Documentos, subidas y respaldos que deberían ser privados se pueden listar y descargar uno a uno.
Un archivo que debería ser privado (configuración, copia de seguridad) está abierto en internet. Es como dejar la llave debajo del tapete, a la vista de todos.
Secreto expuesto: OpenAI
Tu clave de OpenAI se filtró en el sitio. El consumo es de quien la encuentre; la factura, a fin de mes, es tuya.
Una contraseña o clave de acceso quedó visible en el código del sitio. Quien abra la página la encuentra — y puede usar tu cuenta, gastar en tu nombre o leer tus datos.
Content-Security-Policy ausente
Sin CSP, un script inyectado corre suelto en tu página — robando datos y sesiones de tus usuarios sin aviso.
Faltan protecciones básicas que el navegador usa para frenar ataques. Sin ellas, es más fácil inyectar código malicioso o "secuestrar" la pantalla del usuario.
Introspección de GraphQL abierta
El mapa completo de tu API — todos los campos y operaciones — está público. Le entrega el plano listo a quien quiera atacar, antes de intentarlo.
Un endpoint del sitio está abierto o aceptando acciones peligrosas. Puede usarse para extraer datos o abusar del sistema.
Librería con falla conocida
Tu sitio carga una librería con una falla pública ya corregida. Es una puerta vieja sin llave — los bots saben exactamente cómo entrar.
Una biblioteca que usa el sitio tiene una falla pública conocida. Es una puerta que los atacantes ya saben buscar.
DMARC ausente
Sin DMARC, cualquiera envía correo haciéndose pasar por tu dominio. Quien cae en el engaño es tu cliente, y la confianza perdida es tuya.
Al correo de tu dominio le faltan sus cerrojos. Sin ellos, los estafadores pueden enviar correo "en nombre" de tu empresa (phishing) — y tus clientes caen en la trampa.
Subdominios olvidados
Encontramos subdominios que dejaste en línea (api., staging.). Cada uno es una puerta más — y los olvidados suelen ser los más frágiles.
Al correo de tu dominio le faltan sus cerrojos. Sin ellos, los estafadores pueden enviar correo "en nombre" de tu empresa (phishing) — y tus clientes caen en la trampa.
Scripts sin verificación de integridad
Scripts de terceros cargan sin comprobación de integridad. Si el proveedor se ve comprometido, el código malicioso entra directo a tu sitio.
Una biblioteca que usa el sitio tiene una falla pública conocida. Es una puerta que los atacantes ya saben buscar.
Las clasificaciones OWASP y CWE son referencias técnicas públicas. El sello de LGPD/GDPR es indicativo — señala hallazgos que pueden dejar datos personales al alcance de terceros y no sustituye una evaluación jurídica.