Credenciales de BD en Logs
Tu DATABASE_URL o contraseña de base de datos se imprime en los logs de la aplicación vía console.log o mensajes de error, exponiendo credenciales a cualquiera con acceso a los logs.
Cómo Funciona
Frecuentemente sucede por accidente: un manejador de excepciones no capturadas loguea el objeto de error completo, que incluye la cadena de conexión en el stack trace. O un desarrollador agrega console.log(process.env) para debugging y se olvida de quitarlo. Los servicios de logging en la nube como Datadog, CloudWatch o los logs de Vercel capturan todo — y el acceso a logs frecuentemente es más amplio que el acceso a la base de datos.
// MAL: logueando el objeto de error completo que puede incluir la cadena de conexión
pool.on('error', (err) => {
console.error('Error inesperado en cliente idle', err); // err puede contener DATABASE_URL
});
// También MAL: debuguear variables de entorno
console.log('Config:', process.env); // loguea DATABASE_URL y todos los secretos// BIEN: loguea solo información de error segura y no sensible
pool.on('error', (err) => {
// Loguea el código y mensaje del error, no el objeto completo
console.error('Error en pool de BD:', { code: err.code, message: err.message });
});
// Nunca loguees process.env — loguea solo lo que necesitasEjemplo Real
Una startup tenía toda su log de errores de Sentry con DATABASE_URL en cada reporte de error porque su manejador global de errores logueaba el objeto request de Express, que incluía process.env porque el middleware lo había adjuntado. Su contraseña de BD estuvo en Sentry durante 6 meses antes de ser descubierta.
Cómo Prevenirlo
- Nunca loguees process.env, req.headers u objetos de error completos que puedan contener cadenas de conexión
- Usa logging estructurado con selección explícita de campos — solo loguea campos que hayas elegido explícitamente
- Agrega DATABASE_URL y otros secretos a tu configuración de depuración/redacción de logs en Sentry, Datadog, etc.
- Audita tus logs periódicamente para detectar secretos logueados accidentalmente usando herramientas como detect-secrets
- Configura alertas para entradas de log que coincidan con patrones como postgresql:// o password=
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Conexión a Base de Datos Sin Cifrado
highTu conexión a la base de datos no usa SSL/TLS, lo que significa que todas las consultas y resultados viajan por la red en texto plano y pueden ser interceptados.
Base de Datos Accesible Públicamente
criticalTu base de datos está vinculada a 0.0.0.0 o expuesta en una IP pública sin VPC o firewall, haciéndola directamente accesible desde internet.
Credenciales de Base de Datos por Defecto
criticalTu base de datos usa credenciales predeterminadas de fábrica como postgres:postgres, root:root o admin:admin — lo primero que prueba cualquier atacante.
Cadena de Conexión con Contraseña Inline
highUna cadena de conexión a base de datos con contraseña en texto plano está hardcodeada en tu código fuente, comprometiendo tus credenciales de base de datos en el control de versiones.