mediumCWE-400

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.

Código Vulnerable
// 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
});
Código Seguro
// 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

Node.jsPythonGo

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas