Sin Límites en el Pool de Conexiones
Tu pool de conexiones a base de datos no tiene límite máximo de conexiones, lo que significa que un pico de tráfico o una consulta lenta puede agotar todas las conexiones disponibles y tumbar tu app.
Cómo Funciona
PostgreSQL tiene un número finito de conexiones que puede manejar (por defecto: 100). Si tu app crea un nuevo pool de conexiones por cada invocación de función serverless (común en Next.js en Vercel) sin límites, un pico de tráfico puede abrir cientos de conexiones simultáneamente, agotando el límite de PostgreSQL y devolviendo errores de 'too many connections' a todos los usuarios. Esto es un DoS clásico por agotamiento de recursos.
// MAL: pool sin límite máximo de conexiones
const pool = new Pool({
connectionString: process.env.DATABASE_URL
// Sin máximo — el default es ilimitado, agotará Postgres a escala
});// BIEN: configura límites explícitos del pool apropiados para tu despliegue
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 10, // máximo de conexiones simultáneas por pool
idleTimeoutMillis: 30000, // cierra conexiones inactivas después de 30s
connectionTimeoutMillis: 2000 // falla rápido si no puede obtener una conexión
});Ejemplo Real
Los despliegues serverless en Vercel/Netlify son especialmente propensos a esto. Cada instancia de función crea su propio pool. Bajo carga, 50 instancias de función cada una con un pool de 20 conexiones = 1000 conexiones, excediendo instantáneamente el max_connections por defecto de PostgreSQL. La solución es un pooler de conexiones como PgBouncer o el pooler integrado de Supabase.
Cómo Prevenirlo
- Siempre configura un tamaño máximo del pool — para serverless, mantenlo bajo (1-5 por instancia de función) y usa un pooler de conexiones
- Usa PgBouncer o el pooler de conexiones de Supabase en modo transacción para despliegues serverless
- Configura idleTimeoutMillis para reclamar conexiones no utilizadas rápidamente
- Monitorea las conexiones activas a la base de datos en tus métricas — un pico es una advertencia temprana
- Configura max_connections en postgresql.conf según el tamaño de tu instancia y el conteo de conexiones esperado
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.