Timeout de Conexión a BD Faltante
Tu conexión a base de datos no tiene timeout configurado, así que una base de datos lenta o sin respuesta dejará tu aplicación entera colgada indefinidamente en lugar de fallar rápido.
Cómo Funciona
Sin timeouts de conexión, una sola consulta lenta puede mantener una request HTTP abierta por minutos, agotando el pool de hilos o el límite de concurrencia de funciones de tu servidor. Si la base de datos no responde (partición de red, sobrecarga), cada request entrante se cuelga, cascadeando rápidamente a una interrupción completa de la aplicación. El comportamiento de fallo rápido — devolver un error rápidamente — siempre es mejor que esperar indefinidamente.
// MAL: sin timeouts configurados — se cuelga indefinidamente en BD lenta
const pool = new Pool({
connectionString: process.env.DATABASE_URL
// Sin connectionTimeoutMillis, sin statement_timeout, sin query_timeout
});// BIEN: configura timeouts tanto a nivel del pool como de la consulta
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
connectionTimeoutMillis: 3000, // falla si no puede conectar en 3s
statement_timeout: 10000, // cancela consultas que corren más de 10s
query_timeout: 10000 // timeout de consulta del lado del cliente
});Ejemplo Real
Una app SaaS popular experimentó una interrupción completa cuando el lag de su réplica de base de datos se disparó durante una migración. Sin timeouts, todas las 500 requests concurrentes quedaron colgadas esperando respuestas que nunca llegaron, agotando el límite de ejecución concurrente de Vercel y devolviendo errores 504 a todos los usuarios durante 20 minutos.
Cómo Prevenirlo
- Configura connectionTimeoutMillis (cuánto tiempo esperar por una conexión del pool) a 2-5 segundos
- Configura statement_timeout a nivel de sesión PostgreSQL para cancelar consultas desbocadas
- Implementa patrones de circuit breaker para llamadas a la base de datos en rutas de código críticas
- Usa timeouts a nivel de aplicación (AbortController en fetch, Promise.race con timeout) como medida adicional
- Configura lock_timeout en PostgreSQL para prevenir que la contención de locks bloquee indefinidamente
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.