scanfull
Ejemplo desbloqueado — es la corrección que el cliente recibe al pagar.

Informe de seguridad

https://meu-app.lovable.app

14 hallazgos encontrados• informe completo

0/ 100Crítico
4
Crítico
4
Alto
4
Medio
2
Bajo
0
Informativo

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 expuestos2 fallas320
  • Cabeceras HTTP1 falla170
  • Archivos sensibles2 fallas120
  • Almacenamiento en el navegador2 fallas90
  • Base de datos1 falla70
  • DNS / correo2 fallas60
  • Bibliotecas de frontend2 fallas50
  • Endpoints de API1 falla40
  • Cookies1 falla40
  • CORS (orígenes cruzados)Limpio20
  • Transporte / TLSLimpio18
  • Resiliencia (CDN/WAF)Limpio12

No adivinamos: cada hallazgo muestra cuán seguros estamos.

  • Confirmado(12)lo vimos directo, con prueba (el propio dato, archivo o respuesta)
  • Probable(2)señal fuerte, pero sin prueba directa
  • Por confirmar(0)un indicio — conviene revisarlo antes de actuar

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.

OWASP A07:2021CWE-522LGPD art. 46~35 min
Crítico
storage.service-key· 1 ubicaciónConfirmado

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.

OWASP A07:2021CWE-798LGPD art. 46~30 min
Crítico
secrets.stripe-secret-key· 1 ubicaciónConfirmado

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.

OWASP A05:2021CWE-538LGPD art. 46~20 min
Crítico
files.env-exposed· 1 ubicaciónConfirmado

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.

OWASP A01:2021CWE-285LGPD art. 46~45 min
Crítico
database.firebase-open· 1 ubicaciónConfirmado

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 parece mantener la sesión del usuario puede ser leída por JavaScript en la página. Si algún script malicioso entra al sitio (XSS), puede copiar esa cookie y usar la sesión. La marca HttpOnly cierra esa puerta.

OWASP A05:2021CWE-1004LGPD art. 46~15 min
Alto
cookies.session-not-httponly· 1 ubicaciónConfirmado

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.

El sitio guarda datos personales (como tarjeta, documento o datos del usuario) en la memoria del navegador (localStorage). Cualquier script de la página puede leerlos, y quedan en la computadora — incluso en equipos compartidos.

OWASP A05:2021CWE-359LGPD art. 46~40 min
Alto
storage.pii-in-web-storage· 1 ubicaciónConfirmado

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.

OWASP A01:2021CWE-732LGPD art. 46~40 min
Alto
files.public-bucket· 1 ubicaciónConfirmado

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.

OWASP A07:2021CWE-798~25 min
Alto
secrets.openai-key· 1 ubicaciónConfirmado

Content-Security-Policy ausente

Sin CSP, un script inyectado corre suelto en tu página — robando datos y sesiones de tus usuarios sin aviso.

Falta la regla (CSP) que le dice al navegador desde dónde el sitio puede cargar scripts. Por sí sola no evita una falla, pero reduce mucho el daño si alguien logra inyectar código en la página.

OWASP A05:2021CWE-693~40 min
Medio
headers.csp-missing· 1 ubicaciónConfirmado

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.

OWASP A05:2021CWE-200~20 min
Medio
api.graphql-introspection· 1 ubicaciónConfirmado

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.

OWASP A06:2021CWE-1395~30 min
Medio
dependencies.known-vulnerable· 1 ubicaciónProbable

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.

Tu dominio no les dice a los proveedores de correo (Gmail, Outlook…) qué hacer con mensajes que se hacen pasar por ti (DMARC). Sin eso, un correo falso en tu nombre tiene más chances de llegar a la bandeja de entrada de tus clientes.

OWASP A05:2021CWE-290~15 min
Medio
dns.dmarc-missing· 1 ubicaciónProbable

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.

Esto es un inventario, no una falla: las direcciones bajo tu dominio (como api. o staging.) aparecen en registros públicos de certificados. Vale revisar si alguna es un entorno viejo o de prueba olvidado en línea — suelen quedar sin actualizar.

OWASP A05:2021CWE-200~30 min
Bajo
dns.subdomains-discovered· 1 ubicaciónConfirmado

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.

El sitio carga scripts de otras empresas (como un CDN) sin una "huella digital" que confirme que el archivo no fue cambiado. Si ese proveedor fuera comprometido, el código alterado correría en tu sitio. Es una protección extra contra un riesgo raro, pero real.

OWASP A08:2021CWE-353~20 min
Bajo
dependencies.subresource-integrity-missing· 1 ubicaciónConfirmado

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

  1. 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
  2. 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
  3. 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:

PCI-DSS 4.02.26.26.36.3.36.46.4.16.4.37.18.6
ISO/IEC 27001A.5.14A.5.17A.8.24A.8.26A.8.28A.8.3A.8.5A.8.8A.8.9
SOC 2CC6.1CC6.6CC7.1
NIST 800-53AC-3CM-6IA-5RA-5SC-23SC-28SI-10SI-2SI-8
LGPD / GDPRDato personal al alcance de terceros

Mapeo indicativo para orientar la corrección — no es una evaluación ni certificación de conformidad, y no sustituye una auditoría.

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.

Informe de ejemplo — Scanfull