Patrones de Vibecoding
Errores de seguridad comunes en código generado por IA con herramientas como Cursor, Copilot y Claude. El código funciona, pero muchas veces es inseguro.
10 vulnerabilidades
API Keys Hardcodeadas
criticalAPI keys, tokens o secretos escritos directo en el código fuente, visibles para cualquiera con acceso al repo — incluyendo repos públicos de GitHub.
Sin Validación de Inputs
mediumDatos enviados por el usuario pasados directo a bases de datos o APIs externas sin ninguna validación de tipo, formato o contenido.
Contraseñas en Texto Plano
criticalContraseñas de usuarios guardadas como strings crudos en la base de datos en lugar de hashearse con bcrypt o Argon2.
JWT Sin Expiración
highJWTs firmados sin el claim `exp` que nunca expiran, lo que significa que un token robado da acceso permanente sin forma de revocarlo.
Lógica de Auth Solo en Frontend
highMostrar u ocultar elementos de UI basándose en el rol del usuario en React, sin ninguna validación server-side — fácilmente bypasseable abriendo DevTools.
Endpoints Sin Autenticación
highAPI routes que realizan operaciones sensibles — leer datos de usuarios, modificar registros, eliminar recursos — sin ninguna verificación de sesión o token.
Mensajes de Error Verbosos
mediumMensajes de error detallados, stack traces o rutas internas enviados al cliente o logueados públicamente, dándole a los atacantes un mapa de tus internals.
Dependencias Desactualizadas con CVEs Conocidos
mediumPaquetes npm u otras dependencias con vulnerabilidades de seguridad publicadas (CVEs) que no se han actualizado, dejando vectores de ataque conocidos abiertos en tu app.
eval() con Input de Usuario
criticalPasar datos controlados por el usuario a eval(), new Function() o funciones similares de ejecución de código dinámico, habilitando ejecución de código arbitrario en tu servidor.
Secretos en .env Commiteado
criticalUn archivo .env con credenciales reales commiteado a git, haciendo todos los secretos permanentemente accesibles para cualquiera con acceso al repo — incluso a través del historial de git.