API Keys Hardcodeadas
API keys, tokens o secretos escritos directo en el código fuente, visibles para cualquiera con acceso al repo — incluyendo repos públicos de GitHub.
Cómo Funciona
Cuando pegas una API key directo en el código, queda en el historial de git. Aunque la borres después, la key vive en cada clon y fork para siempre. Bots automatizados escanean GitHub 24/7 buscando patrones como `sk-`, `AKIA`, `ghp_` y `ghs_`, y usan las keys encontradas en minutos.
// MAL: key pegada directo en el código
const openai = new OpenAI({
apiKey: 'sk-proj-abc123xyz789...'
});
const stripe = new Stripe('sk_live_51Abc...');// BIEN: carga desde variables de entorno
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY
});
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);Ejemplo Real
En 2024, un dev hizo commit accidental de una key de AWS (AKIA...) a un repo público. En 4 minutos, los bots ya habían levantado cientos de instancias EC2 para minar crypto, generando una factura de $47,000 antes de que AWS suspendiera la cuenta.
Cómo Prevenirlo
- Guarda todos los secretos en variables de entorno y cárgalos con process.env
- Agrega .env al .gitignore antes de tu primer commit — nunca después
- Usa git-secrets o truffleHog en tu CI para bloquear commits con secretos
- Rota cualquier key que haya sido commiteada, aunque sea por un momento — asume que está comprometida
- Activa el secret scanning de GitHub (gratis para repos públicos)
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
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.