highCWE-532OWASP A09:2021

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.

Código Vulnerable
// 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
Código Seguro
// 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 necesitas

Ejemplo 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

Node.jsPython

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas