¿Está sufriendo un ataque? Solicite respuesta a incidentes

info@angelforce.eu
Vulnerabilidades

Seguridad de Node.js, octubre de 2026: RCE en Brotli y fallos de TLS

Node.js 22.23.4, 24.22.1 y 26.12.1 corrigen diez fallos, entre ellos un error del decodificador Brotli que permite ejecutar código. Quién está expuesto y cómo actualizar.

También en:EnglishTürkçeDeutschFrançaisItalianoPolskiNederlandsEesti

Ilustración: Seguridad de Node.js, octubre de 2026: RCE en Brotli y fallos de TLS

El 21 de octubre de 2026 el proyecto Node.js publicó las versiones 22.23.4, 24.22.1 y 26.12.1. Corrigen diez vulnerabilidades, cuatro de ellas de gravedad alta. La más grave, CVE-2026-111497, es una escritura fuera de límites en el decodificador Brotli de Node: unos datos comprimidos malformados pueden corromper la memoria, y la empresa de alojamiento Vercel informa de que unos investigadores la utilizaron para leer la memoria del proceso y ejecutar comandos con los permisos del proceso de Node.js. Otros dos fallos de gravedad alta permiten que un certificado TLS supere la comprobación del nombre de host cuando no debería. Node.js 20 y 25 han llegado al final de su vida útil y no recibirán corrección.

Qué versiones están corregidas

RamaCorregido enEstado
26.x26.12.1actual
24.x (LTS)24.22.1con soporte
22.x (LTS)22.23.4con soporte
25.xsin correcciónfinal de vida útil, pase a 26 o 24
20.xsin correcciónfinal de vida útil desde el 30 de abril de 2026, pase a 22 o 24

Cuáles son los diez fallos

CVEGravedadProblemaRamas
CVE-2026-111497AltaEscritura fuera de límites en el decodificador Brotli, puede llevar a la ejecución de código26, 24, 22
CVE-2026-105483AltaLa comprobación del nombre de host TLS se supera cuando la IP está escrita con dígitos de ancho completo26, 24
CVE-2026-106069AltaLa comprobación del nombre de host TLS se supera cuando el host se resuelve de forma laxa a una dirección IP26, 24, 22
CVE-2026-105482Altadns.resolve corta los nombres en un carácter NUL26, 24, 22
CVE-2026-105481MediaUn socket keep-alive puede aceptar una respuesta escrita antes de enviar la petición26, 24, 22
CVE-2026-106072MediaUn nombre DNS de un certificado puede autenticar un endpoint IP en hosts IPv4 no canónicos26, 24, 22
CVE-2026-106074MediarandomUUID() y randomInt() repiten los mismos valores en las instantáneas de arranque y en las aplicaciones de ejecutable único26, 24, 22
CVE-2026-106073BajaOmisión del Permission Model con fs.realpathSync26, 24, 22
CVE-2026-106070BajaZipFile devuelve bytes controlados por el atacante tras fallar la comprobación de la cabecera26
CVE-2026-106071BajaEl Permission Model concede demasiado acceso a archivos mediante comodines26

Las versiones también actualizan componentes incluidos: c-ares, Undici, la lista de CA de confianza (con la eliminación de la CA intermedia comprometida de eMudhra), OpenSSL en 24 y 22, y SQLite en 22.

Quién está expuesto al fallo de Brotli

Node.js no decodifica Brotli por sí solo. Está expuesto cuando su código, o una biblioteca que utiliza, descomprime datos Brotli controlados por otra persona. Ocurre con más frecuencia de lo que parece:

  • El fetch() integrado decodifica automáticamente las respuestas con Content-Encoding: br. Un servicio que obtiene URL elegidas por usuarios, webhooks o API de terceros puede recibir una respuesta maliciosa.
  • axios, got y node-fetch también decodifican las respuestas comprimidas de forma predeterminada.
  • Express 5 (body-parser 2) decodifica de forma predeterminada los cuerpos de petición Brotli, de modo que una API puede recibir los datos directamente de un atacante.
  • Cualquier llamada a zlib.brotliDecompress, zlib.createBrotliDecompress o DecompressionStream sobre archivos subidos o datos de terceros.

Parchee primero donde estos casos se encuentran con internet: las API públicas que aceptan cuerpos comprimidos, los servicios que obtienen URL proporcionadas por usuarios y todo lo que descomprime archivos subidos.

Los fallos de TLS importan sobre todo cuando un atacante puede obtener, de una CA en la que confía su cliente, un certificado que contenga un nombre DNS con forma de IP, y el fallo de DNS cuando su código pasa datos externos a dns.resolve. Según el commit de la corrección, los problemas de TLS no son fáciles de explotar, pero la misma actualización los cierra.

Paso 1: localice cada entorno de ejecución de Node.js

En Linux, liste cada binario node con su versión:

sudo find / -xdev -type f -name node -perm -u+x 2>/dev/null | while read -r n; do echo "$n: $("$n" --version 2>/dev/null)"; done

Compruebe qué entorno de ejecución usan los procesos en marcha:

for p in $(pgrep -x node); do echo "$p $(sudo readlink -f /proc/$p/exe)"; done

En Docker, compruebe cada contenedor en ejecución:

for c in $(docker ps --format '{{.Names}}'); do echo "$c: $(docker exec "$c" node --version 2>/dev/null)"; done

Revise también los gestores de versiones (nvm, fnm, Volta, asdf), los ejecutores de CI, las imágenes de compilación, las aplicaciones Electron y las funciones serverless, donde la versión del entorno de ejecución se fija en la configuración del proyecto.

Paso 2: actualice

Ubuntu y Debian con los paquetes de NodeSource:

sudo apt update && sudo apt install --only-upgrade nodejs && node --version

Con nvm:

nvm install 24.22.1 && nvm alias default 24.22.1

Contenedores: cambie la imagen base a una versión fija, por ejemplo node:24.22.1-alpine o node:22.23.4-bookworm-slim, reconstruya y vuelva a desplegar. Actualizar el host no cambia lo que se ejecuta dentro de un contenedor.

Plataformas serverless y de alojamiento: en Vercel, los proyectos en 22.x y 24.x los parchea Vercel, y Vercel añadió reglas de firewall contra el ataque entrante; los proyectos que siguen en 20.x deben pasar a 22.x o 24.x y volver a desplegarse. En otras plataformas, consulte el aviso del proveedor y vuelva a desplegar cuando el entorno de ejecución parcheado esté disponible.

Los paquetes de las distribuciones, como el propio paquete nodejs de Ubuntu, suelen ir con retraso. Si node --version no muestra 22.23.4, 24.22.1 ni 26.12.1 (ni una compilación de la distribución que mencione estos CVE), utilice las versiones oficiales.

Paso 3: reinicie y verifique

Un proceso en ejecución conserva el entorno de ejecución antiguo hasta que se reinicia. Tras actualizar un paquete en Linux, este comando lista los procesos node que aún ejecutan el binario sustituido:

sudo ls -l /proc/*/exe 2>/dev/null | grep -i 'node.*(deleted)'

Reinicie esos servicios (por ejemplo con systemctl restart, pm2 reload all o un nuevo despliegue) y vuelva a ejecutar los comandos del paso 1.

Si no puede actualizar hoy

Ninguna de estas medidas sustituye a la actualización, pero reducen el riesgo durante unos días:

  • Rechace los cuerpos de petición Brotli antes de que lleguen a la aplicación, por ejemplo en NGINX con if ($http_content_encoding ~* br) { return 415; }, o en un middleware que se ejecute antes de los analizadores de cuerpo.
  • Desactive la descompresión automática en las peticiones a servidores no fiables: decompress: false en axios y got, compress: false en node-fetch, o request() de undici, que no descomprime. El fetch() integrado no se puede desactivar.
  • Ejecute las peticiones a URL proporcionadas por usuarios en un proceso aparte con los menores permisos posibles.
  • Antes de pasar datos externos a dns.resolve, rechace los nombres que contengan un carácter NUL.

Si no está seguro de cuáles de sus servicios decodifican datos no fiables, o necesita ayuda para actualizar un sistema en producción sin interrupciones, nuestros equipos de software seguro y de seguridad gestionada pueden ayudarle.

Cómo podemos ayudarle

Software seguro

Integramos la seguridad en el software desde el primer commit y desarrollamos nuestras propias herramientas de seguridad.

Contacte con nosotros
Equipo de AngelForce

Escrito por el equipo de AngelForce: consultores de seguridad con certificaciones CEH, LPT Master y CISA que prueban, supervisan y protegen los sistemas de organizaciones de toda Europa.

Redactado con ayuda de IA a partir de las fuentes públicas que se indican más abajo y revisado por el equipo de AngelForce antes de su publicación.

Fuentes

  1. nodejs.org/en/blog/vulnerability/october-2026-security-releases
  2. vercel.com/kb/bulletin/node-js-security-advisory
  3. atlasum.net/blog/cve-2026-111497-nodejs-brotli-decoder
  4. lilting.ch/en/articles/nodejs-tls-dns-brotli-security-release
  5. wardio.net/guides/nodejs-brotli-cve-2026-111497/

Artículos sobre Vulnerabilidades

Cuéntenos qué necesita proteger

Describa su entorno y lo que quiere conseguir. Le responderemos por correo electrónico.

Contacte con nosotros
info@angelforce.eu

AngelForce OÜ · Tallinn, Estonia