✨︎ Resumen (TL;DR):
- Imperva ejecutó código con datos Brotli manipulados en una imagen oficial de Node.js 24.22.0 para Linux arm64.
- CVE-2026-111497 afecta al decodificador Brotli de las ramas 22.x, 24.x y 26.x. Node.js publicó las correcciones el 21 de octubre de 2026.
- Actualizar paquetes npm o filtrar solicitudes no basta: hay que desplegar el runtime corregido y reiniciar los servicios que aún conservan el anterior en memoria.
Imperva demostró una ejecución remota de código en una imagen oficial de Node.js 24.22.0 para Linux arm64 al procesar datos Brotli manipulados. La demostración, llamada Node2Shell, confirma el riesgo para aplicaciones que descomprimen contenido no confiable mediante solicitudes entrantes o respuestas externas. La vulnerabilidad CVE-2026-111497, clasificada con severidad alta, tiene versiones corregidas disponibles desde el 21 de octubre de 2026.
El fallo está en el decodificador Brotli incluido en Node.js. Al procesar datos malformados, puede escribir fuera del espacio de memoria previsto. Eso puede provocar el cierre del proceso, exponer su memoria o permitir ejecución remota de código.
El análisis de Imperva, fechado el 22 de octubre, describe una prueba que no usó depurador ni un binario modificado. Necesitó varios intentos y su resultado se limita a las configuraciones ensayadas en Linux arm64. Con Node.js 24.22.1, el programa rechazó los mismos datos y el código no se ejecutó.

Dos rutas llevan al decodificador vulnerable
Brotli es un formato de compresión que reduce el tamaño de los datos durante la transmisión. La exposición aparece cuando una aplicación entrega al decodificador contenido controlado por un atacante.
Imperva reprodujo dos rutas:
- Solicitud entrante: la aplicación procesa el cuerpo comprimido mediante el middleware que tenga configurado, por ejemplo los analizadores de Express 5 o body-parser 2.
- Respuesta externa: la aplicación recibe una respuesta comprimida de otro servidor y la consume mediante la función integrada
fetch()de Node.js.
Imperva explica que recibir una solicitud comprimida no basta para activar la falla. La aplicación debe descomprimirla, y la configuración del servicio determina si esa ruta existe.
Un firewall no sustituye la actualización
Vercel informó que desplegó reglas de firewall el 21 de octubre para bloquear la vía de entrada en sus proyectos. Esa protección cubre el tráfico que atraviesa su red, pero deja fuera las respuestas que las funciones obtienen de otros servidores.
Un servicio puede tener filtradas las solicitudes y aun así alcanzar el decodificador vulnerable al consumir una respuesta externa. El filtrado de una ruta no elimina el componente defectuoso del runtime.
Versiones corregidas: el parche debe llegar al runtime
Node.js publicó estas versiones corregidas para CVE-2026-111497 el 21 de octubre de 2026:
- Rama 22.x: primera versión corregida, 22.23.4.
- Rama 24.x: primera versión corregida, 24.22.1.
- Rama 26.x: primera versión corregida, 26.12.1.
Imperva recomienda desplegar esas versiones o posteriores que incluyan la corrección y migrar las aplicaciones que sigan en ramas sin soporte. Vercel precisa que Node.js 20.x ya terminó su ciclo de mantenimiento y no recibirá este parche.
Runtime es el entorno que ejecuta JavaScript. Qualys señala que actualizar únicamente las dependencias o paquetes npm de la aplicación deja intacta esta falla, porque el componente vulnerable forma parte del runtime.
La guía de Qualys pide reconstruir las imágenes de contenedor y las aplicaciones empaquetadas en un solo ejecutable con la versión corregida, para después volver a desplegarlas. Imperva recomienda comprobar la versión dentro de cada imagen o servidor que ya esté desplegado.
Los servicios que siguen activos conservan el runtime anterior en memoria hasta que se reinician. Reemplazar el archivo instalado es solo una parte de la actualización: los procesos deben reiniciarse para dejar de usar la versión vulnerable.
