Las aplicaciones Vibecoded son una pesadilla de seguridad
Alguien publicó una aplicación de chat aquí recientemente y pensé en echar un vistazo. En 30 minutos pude romper completamente la aplicación.
Estoy ocultando el dominio y los datos sensibles.
La aplicación funciona. La interfaz está bien. Tiene más funciones de las que esperarías de un proyecto de fin de semana; desde fuera parece una aplicación terminada, pero cuando miras bajo el capó, no tanto...
Prácticamente todo lo que podía estar mal, estaba mal.
- Clave privada de OpenAI expuesta en el bundle público de JavaScript
- Configuración de Firebase totalmente pública
- localStorage usado para la gestión de identidad
- Datos de administrador y reportes legibles sin controles de acceso
- Sistema de bloqueo no verificado por el backend
Firebase era el mayor problema. Las reglas de la base de datos estaban completamente abiertas. Cualquiera podía leer y modificar todas las salas de chat (hay salas privadas que deberían requerir contraseña), usuarios reportados, registros de administración, estadísticas de usuarios, listas de bloqueo, etc.
Pude ajustar mi rango de usuario, pero también puedo modificar los datos de cualquier otro usuario en la aplicación (falsificar mensajes, bajar de rango, cambiar nombre de usuario, etc.).
El sistema de bloqueo es completamente ineficaz, usa un ID de dispositivo en localStorage; alguien podría simplemente cambiar el valor o borrar la caché y las cookies y evadir el bloqueo.
Problemas comunes:
- Claves API expuestas en el frontend
- Firebase/Supabase con permisos inadecuados
- Confiar en el estado del navegador y del dispositivo
- Confiar en
localStoragepara la identidad - Verificaciones de administrador en el lado del cliente
- Verificaciones de moderación en el lado del cliente
- Roles, rangos, créditos o saldos de usuario almacenados en registros editables
- Datos privados ocultos en la interfaz pero legibles a través del backend
Si estás construyendo estas aplicaciones, por favor revisa esto antes de lanzar:
- Busca en tu JavaScript desplegado
sk_,sk-,OPENAI,SECRET,TOKENyPRIVATE. No debe haber claves privadas expuestas en el frontend. - Prueba los permisos de Firebase o Supabase estando desconectado.
- Intenta leer tu base de datos directamente desde un terminal.
- Asegúrate de que las rutas solo de administrador estén protegidas por reglas de backend, no solo por botones ocultos.
- No confíes en
localStoragecomo prueba de identidad. - No dejes que los usuarios escriban directamente su propio rol, rango, saldo, contador de mensajes o estado de suscripción.
Las herramientas de IA pueden ayudarte a construir rápido. Esa parte es real. Pero si la aplicación involucra usuarios, dinero, moderación, salas privadas, paneles de administración o cualquier cosa que importe, necesita una revisión de seguridad antes de salir en vivo.
Visto en r/vibecoding