Seguridad en Node.js, octubre de 2026: qué actualizar y por qué
El 21 de octubre de 2026 el proyecto Node.js publicó versiones de seguridad para sus tres ramas con soporte: v26.12.1, v24.22.1 y v22.23.4. Corrigen diez vulnerabilidades. Cuatro tienen gravedad alta, y la que más atención recibe es una escritura fuera de límites en el decodificador Brotli que, según el proyecto, permite ejecución remota de código. El arreglo ya está publicado para cada rama con soporte, así que es una actualización rutinaria, y conviene hacerla antes de que deje de serlo.
Tres tipos de arreglo en una sola versión
Los cuatro fallos de gravedad alta no son un único bug. Están en tres partes distintas del runtime, y a cada uno se llega desde un tipo de código diferente.
El decodificador Brotli (CVE-2026-111497, las tres ramas). Un fallo de memoria en el código nativo que descomprime datos. Mi lectura, como razonamiento general y no como algo que el aviso detalle: el código que llega a él es el que descomprime datos Brotli controlados por otra persona. Un servidor que acepta cuerpos de petición comprimidos, o un cliente que pide respuestas a API de terceros y las descomprime, encajan los dos.
Validación del nombre de host TLS (CVE-2026-106069 en las tres ramas, CVE-2026-105483 en 26 y 24). Son fallos de lógica en la comprobación de que un certificado corresponde al host al que querías llegar: uno cuando el host se resuelve de forma laxa a una dirección IP, otro cuando una IP está escrita con dígitos de ancho completo. Un fallo hermano de gravedad media, CVE-2026-106072, permite que nombres DNS de un certificado autentiquen endpoints IP escritos en forma IPv4 no canónica. El código expuesto es cualquiera que se conecte a un host o a una IP que vengan de un usuario, de un ajuste de webhook o de un archivo de configuración.
Manejo de nombres DNS (CVE-2026-105482, las tres ramas). dns.resolve trunca los nombres que contienen un carácter NUL. De nuevo como razonamiento general: importa allí donde se resuelve un nombre que no escribiste tú, por ejemplo para compararlo con una lista de permitidos.
El resto tiene gravedad media o baja: un socket keep-alive que procesa una respuesta escrita antes de enviar la petición, valores aleatorios que se repiten en los snapshots de arranque, y problemas en el modelo de permisos y en ZipFile. La versión también actualiza dependencias incluidas, entre ellas c-ares, Undici y la lista de certificados de CA, que retira la confianza en la CA intermedia comprometida de eMudhra.
Comprueba el Node que de verdad ejecutas
Tu portátil suele ser el sitio menos importante que revisar. El runtime que sirve el tráfico sale de una imagen base de Docker, y el que ejecuta tus tests, de una imagen de CI. Pueden irse separando entre sí.
# on any machine, or inside a running container
node -v
# what a base image really ships, without trusting its tag name
docker run --rm node:22 node -v
Compara cada respuesta con las versiones corregidas: 26.12.1 o posterior en la 26, 24.22.1 o posterior en la 24, 22.23.4 o posterior en la 22. Una etiqueta como node:22 solo se mueve cuando vuelves a descargarla, así que una imagen en caché en un servidor de build puede seguir teniendo el parche antiguo. Si tu Dockerfile fija una versión exacta, súbela.
Node 20 no recibe nada
Node 20 "Iron" llegó al final de su vida; su última actualización fue el 24 de marzo de 2026, y no aparece en esta versión. El proyecto lo dice con claridad: las versiones sin soporte siempre están afectadas cuando sale una versión de seguridad. Así que "estamos en la 20, no salía en la lista" significa lo contrario de estar a salvo. Las ramas impares como la 25 y la 23 también están sin soporte. La recomendación del proyecto es ejecutar en producción solo ramas Active LTS o Maintenance LTS, que hoy son la 24 o la 22, o la 26 si aceptas una versión Current.
El siguiente paso es pequeño: sube la versión fijada de la imagen base en tu Dockerfile y en la configuración de CI al parche corregido de tu rama, reconstruye sin caché y deja correr la suite de tests. Si sigues en Node 20, planifica ya el paso a 22 o 24 en vez de esperar al próximo aviso. Fuente: nodejs.org, Wednesday, October 21, 2026 Security Releases.
Notas de los lectores