Sin Validación de Certificado SSL de BD
Tu conexión SSL a la base de datos usa rejectUnauthorized: false, que cifra el tráfico pero no verifica la identidad del servidor, dejándote expuesto a ataques de hombre en el medio.
Cómo Funciona
SSL sin validación de certificado es como cerrar con llave tu puerta pero no verificar quién está del otro lado. Tus datos están cifrados en tránsito, pero un atacante que intercepte la conexión (ej. vía ARP spoofing en redes internas de cloud) puede presentar cualquier certificado y tu cliente lo aceptará. Ahora estás mandando tus credenciales de base de datos y consultas a la computadora del atacante.
// MAL: SSL habilitado pero validación de certificado deshabilitada
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false // deshabilita validación de cert — riesgo de MITM
}
});// BIEN: habilita SSL con validación adecuada de certificado
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: true, // verifica certificado del servidor (el default debe ser true)
ca: process.env.DB_CA_CERT // ancla el certificado CA de tu proveedor de BD para mayor seguridad
}
});Ejemplo Real
rejectUnauthorized: false es una de las sugerencias de 'fix' más comunes en Stack Overflow para errores SSL con certificados autofirmados — y una de las más peligrosas. Muchas apps en producción tienen esta configuración de un copy-paste apresurado de un desarrollador, dejando su comunicación con la base de datos vulnerable a interceptación.
Cómo Prevenirlo
- Siempre mantén rejectUnauthorized: true (el default) — nunca lo configures a false en producción
- Si obtienes errores SSL con un certificado autofirmado, soluciona el problema del certificado en lugar de deshabilitar la validación
- Para bases de datos administradas, descarga el certificado CA de tu proveedor y anclaló con la opción ca
- Usa la variable de entorno NODE_EXTRA_CA_CERTS para agregar certificados CA personalizados sin deshabilitar la validación
- Audita en busca de rejectUnauthorized: false en tu codebase — es un 'fix temporal' común que se vuelve permanente
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.