Seguridad y privacidad

Node.js parchea fallos críticos de HTTP/2 y fugas de memoria TLS

Node.js ha publicado actualizaciones de seguridad para las versiones 22, 24 y 26 para corregir 16 vulnerabilidades, incluidos errores de alta severidad que permiten caídas remotas y filtración de datos en servidores HTTP/2 y HTTPS.

Ilustración de un servidor protegido por un escudo contra fugas de datos
Ilustración creada para este artículo

Traducido automáticamente del original en inglés.

El proyecto Node.js ha publicado parches de seguridad de emergencia para sus líneas de ejecución compatibles con el fin de abordar dieciséis vulnerabilidades, varias de las cuales suponen riesgos inmediatos para los servidores web. La actualización cubre las versiones 22.23.5, 24.22.3 y 26.13.1, corrigiendo fallos que permiten a atacantes no autenticados colapsar servicios o filtrar contenido sensible de la memoria. Estas correcciones son críticas para cualquier organización que ejecute aplicaciones autoalojadas en estas ramas de lanzamiento específicas.

Qué ha ocurrido

Los problemas más graves afectan a las implementaciones de HTTP/2 y HTTPS dentro del núcleo de Node.js. Un fallo, rastreado como CVE-2026-123863, permite que un cliente remoto bloquee un servidor HTTP/2 simplemente enviando una solicitud donde el servidor responde antes de que se reciba completamente el cuerpo de la petición. Este comportamiento es típico en muchas configuraciones predeterminadas, lo que hace que una amplia gama de despliegues sea vulnerable a ataques de denegación de servicio tanto sobre conexiones cifradas como en texto plano.

Otra vulnerabilidad crítica, CVE-2026-123866, permite que un cliente provoque una fuga de memoria que expone datos de otras conexiones activas. En algunos escenarios, esto puede incluir respuestas destinadas a diferentes usuarios. Un tercer error de alta severidad, CVE-2026-123864, afecta específicamente a los servidores HTTPS. Permite que un atacante no autenticado lea la memoria del servidor, exponiendo potencialmente claves privadas TLS y datos de solicitudes de otros usuarios, siempre que el código de la aplicación llame a métodos de respuesta específicos en un orden concreto.

El aviso de seguridad no lista soluciones alternativas para estos problemas, indicando que actualizar a las versiones corregidas es la única vía de remediación. Los servidores que ejecutan versiones fuera de soporte (end-of-life), como 20.x y 25.x, no reciben parches y permanecen permanentemente vulnerables a estos exploits. El proyecto no reportó ninguna explotación activa en el momento del lanzamiento, ni especificó si los servidores comprometidos deben rotar sus claves TLS tras aplicar el parche.

Detalles clave

  • Las versiones corregidas son 22.23.5, 24.22.3 y 26.13.1; las tres líneas compatibles están afectadas.
  • CVE-2026-123863 permite a clientes no autenticados bloquear servidores HTTP/2 mediante respuestas prematuras.
  • CVE-2026-123864 permite leer claves privadas TLS y otros datos de conexión desde la memoria del servidor HTTPS.
  • Los lanzamientos fuera de soporte como Node.js 20.x y 25.x no reciben correcciones y permanecen vulnerables.
  • Cinco de las vulnerabilidades fueron reportadas por Chris Rohlf en colaboración con Anthropic Research.
  • El aviso establece explícitamente que no existen soluciones alternativas conocidas aparte de actualizar el runtime.

Contexto

Node.js es un runtime de JavaScript ampliamente utilizado para construir aplicaciones de red escalables. Sus módulos integrados HTTP/2 y HTTPS gestionan protocolos de red de bajo nivel, incluyendo cifrado TLS y flujos multiplexados. Cuando existen vulnerabilidades en estos módulos principales, afectan a todas las aplicaciones que los utilizan, independientemente del framework de alto nivel como Express o Fastify. Esto difiere de los errores a nivel de aplicación, que los desarrolladores suelen poder parchear en su propio código. Las vulnerabilidades del núcleo requieren esperar a que los mantenedores del runtime publiquen una nueva versión binaria o de código fuente.

HTTP/2 mejora el rendimiento al permitir múltiples solicitudes sobre una sola conexión, pero introduce una gestión compleja del estado para flujos y cabeceras. Los errores en esta área a menudo conducen al agotamiento de recursos o corrupción de memoria porque el servidor debe rastrear el estado de muchas interacciones concurrentes. De manera similar, el manejo de TLS implica gestionar claves criptográficas y datos de sesión en memoria. Si un fallo permite leer fuera del búfer de memoria previsto, los atacantes pueden extraer secretos que deberían permanecer protegidos por la capa de cifrado.

Por qué importa

Para los equipos que ejecutan software autoalojado, estas vulnerabilidades representan una amenaza directa para la disponibilidad y la confidencialidad. Un fallo de bloqueo significa que un atacante puede derribar tu API o interfaz web con un esfuerzo mínimo, causando tiempos de inactividad que impactan a los usuarios y a los ingresos. Dado que la condición de disparo para el bloqueo es común en configuraciones predeterminadas, muchos servicios pueden estar expuestos sin necesidad de cambios personalizados en la configuración. Esto hace que el parcheo oportuno sea esencial para mantener la fiabilidad del servicio.

Los problemas de fuga de memoria son aún más preocupantes para organizaciones conscientes de la seguridad. Si un atacante puede leer claves privadas TLS, podría potencialmente descifrar tráfico pasado o futuro si también captura paquetes de red. Filtrar datos de solicitudes de otros usuarios viola las expectativas de privacidad y puede incumplir requisitos de conformidad como GDPR o HIPAA. Debido a que estos fallos residen en el propio runtime, los firewalls a nivel de aplicación o la validación de entradas pueden no mitigar completamente el riesgo, dejando expuesto el proceso subyacente del servidor.

Además, la falta de correcciones para las versiones fuera de soporte obliga a tomar decisiones difíciles a los equipos que aún usan Node.js 20 o 25. Deben emprender una migración urgente a una versión compatible o aceptar el riesgo de ejecutar infraestructura vulnerable. Esto destaca la carga operativa de mantener los runtimes actualizados, ya que retrasar las mejoras puede llevar a situaciones donde no hay parche disponible cuando se descubre un fallo crítico.

Qué puedes hacer

  • Identifica todos los servidores que ejecutan Node.js 22, 24 o 26 y planifica una actualización inmediata a las versiones corregidas.
  • Comprueba si algún servicio está funcionando en versiones fuera de soporte como 20.x o 25.x y prioriza su migración.
  • Revisa los registros de la aplicación para detectar bloqueos inusuales o conexiones restablecidas que puedan indicar intentos de explotación.
  • Considera rotar las claves privadas TLS y los certificados si sospechas que algún servidor era vulnerable a CVE-2026-123864.
  • Prueba tu aplicación exhaustivamente después de actualizar, ya que los incrementos menores de versión pueden introducir ocasionalmente cambios incompatibles.
  • Monitorea el canal de seguridad de Node.js para futuros avisos, especialmente respecto a la necesidad de rotación de claves.

Más noticias

Todas las noticias