Secretos en .env Commiteado
Un 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.
Cómo Funciona
git rastrea cada versión de cada archivo. Cuando haces commit de un .env con secretos reales y después lo borras, los secretos permanecen en cada commit anterior. Cualquiera que clone el repo puede correr `git log -p` y recuperar los secretos. Para repos públicos, GitHub también indexa el contenido para búsqueda.
# MAL: .env commiteado a git (nunca hagas esto)
DATABASE_URL=postgresql://user:contrasenareal@db.host/prod
STRIPE_SECRET_KEY=sk_live_abc123
ANTHROPIC_API_KEY=sk-ant-key-real-aqui# BIEN: .env.example solo con placeholders
DATABASE_URL=postgresql://user:password@localhost/mydb
STRIPE_SECRET_KEY=sk_live_tu_key_aqui
ANTHROPIC_API_KEY=sk-ant-tu-key-aqui
# Los valores reales van en .env (gitignoreado) o en tu plataforma de deploymentEjemplo Real
El breach de Twitch en 2021 incluyó secretos de herramientas internas que habían sido commiteados a repos internos años antes. Incluso los repos 'privados' pueden exponerse por amenazas internas, empresas adquiridas o controles de acceso mal configurados.
Cómo Prevenirlo
- Agrega .env y .env.local al .gitignore antes de tu primer commit
- Solo haz commit de .env.example con valores placeholder, nunca credenciales reales
- Si ya commiteaste secretos, rota todas las credenciales expuestas de inmediato
- Usa git filter-repo o BFG Repo-Cleaner para purgar secretos del historial de git
- Usa truffleHog o git-secrets como pre-commit hook para bloquear futuros commits con secretos
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
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.