TL;DR
Node.js lanzó el miércoles una actualización de seguridad para corregir una vulnerabilidad relacionada con la forma en que descomprime datos Brotli, un error que ya se conoce como Node2Shell (CVE-2026-111497). Si un atacante consigue introducir una carga maliciosa en tu aplicación, esta vulnerabilidad puede provocar el bloqueo del proceso, una fuga de parte de su memoria o, potencialmente, permitirle ejecutar su propio código.
A quién afecta: a cualquier usuario que utilice Node.js o Bun y cuya aplicación descomprima datos en formato Brotli que un atacante pudiera controlar.
Solución: actualiza a la versión parcheada de Node.js correspondiente a tu línea de versiones
- 22.x -> 22.23.4
- 24.x -> 24.22.1
- 26.x -> 26.12.1
Para Bun, actualiza a la versión 1.4.4 o posterior.
Cómo ayuda Aikido: Aikido detecta la vulnerabilidad y te muestra qué repositorios e imágenes de contenedores siguen ejecutando una versión vulnerable.
¿A quién afecta el CVE-2026-111497?
Si utilizas Node.js, da por hecho que te ves afectado hasta que hayas comprobado tu versión. Todas las líneas de versiones compatibles presentaban el fallo antes de la actualización del 21 de octubre, y Bun también lo presentaba hasta la versión 1.4.4.
El grado de vulnerabilidad depende de dónde obtenga tu aplicación los datos comprimidos. Brotli es un formato de compresión que utilizan servidores y clientes para reducir el tráfico web, y la vulnerabilidad puede activarse cuando Node.js descomprime datos Brotli controlados por un atacante. Esto puede ocurrir al menos de tres formas:
- Servidores que aceptan solicitudes: Express 5 y body-parser 2.x descomprime los cuerpos de las solicitudes enviados con
Content-Encoding: br, y cualquier cliente puede enviar uno. Un servidor HTTP básico de Node.js no descodifica por sí solo los cuerpos Brotli entrantes. - Aplicaciones que se conectan a otros servidores:
fetch()descomprime automáticamente las respuestas Brotli, por lo que un servidor controlado por un atacante o que este haya comprometido puede acceder a tu aplicación a través de su respuesta. Los webhooks y otras funciones que llaman a direcciones URL proporcionadas por el usuario son los objetivos habituales. - Código que utiliza
nodo:zlibdirectamente: cualquier entrada no fiable que se pase a sus funciones Brotli. Muchos otros marcos de trabajo de servidor en los que se basan las aplicaciones lo harán por ti.
| Línea de lanzamiento | Estado | Versión corregida |
|---|---|---|
| Node.js 26.x | Actual | 26.12.1 |
| Node.js 24.x | Asistencia a largo plazo | 24.22.1 |
| Node.js 22.x | Asistencia a largo plazo | 22.23.4 |
| Node.js 25.x, 23.x, 20.x y versiones anteriores | Fin de la vida útil | No hay solución |
Cómo solucionar el CVE-2026-111497
La solución consiste en actualizar Node.js, y hay que seguir cuatro pasos:
- Comprueba tu versión con
node --versiónen ordenadores portátiles, entornos de ejecución de CI, servidores y dentro de contenedores. - Actualiza a la versión 22.23.4, 24.22.1 o 26.12.1, o a una versión de parche más reciente de la misma línea.
- Recompila y vuelve a implementar tus imágenes de contenedor. Una imagen vinculada a una etiqueta anterior, como por ejemplo
nodo:22.23.3-alpine, sigue siendo vulnerable hasta que lo vuelvas a compilar con una versión parcheada. - Planifica la migración desde Node.js 25.x, 23.x, 20.x y versiones anteriores. Esas versiones han llegado al final de su ciclo de vida y no recibirán esta corrección.
Las plataformas gestionadas que incluyen su propio entorno de ejecución de Node.js pueden ir por detrás de la versión más reciente, así que comprueba qué versión utiliza tu proveedor. Si no puedes actualizar hoy mismo, consulta las soluciones provisionales que se indican a continuación. Los usuarios de Bun deben actualizar a la versión 1.4.4 o posterior de Bun, que incluye la corrección. El equipo de Bun ha registrado este problema en el issue 46352 de oven-sh/bun.
Si tu Node.js procede de un paquete de una distribución de Linux, como Debian, Ubuntu, Fedora, RHEL o Alpine, es posible que utilice la biblioteca Brotli del sistema en lugar de la incluida en Node.js. En ese caso, la corrección se aplica a través del paquete Brotli de tu distribución, por lo que debes consultar el aviso de seguridad de tu distribución, así como el número de versión.
Cómo ayuda el aikido con el CVE-2026-111497
Aikido detecta esta vulnerabilidad y señala las versiones de Node.js afectadas en tus repositorios e imágenes de contenedores. Tu panel de control muestra qué servicios siguen ejecutándose con un entorno de ejecución vulnerable, de modo que puedas actualizar primero aquellos que realizan llamadas a servidores externos o aceptan cuerpos de solicitud comprimidos. Una vez realizada la actualización, una nueva comprobación de Aikido confirma que el problema ha desaparecido.
Detalles técnicos de Node2Shell
¿Qué es Node2Shell (CVE-2026-111497)?
CVE-2026-111497 es un error de escritura fuera de límites en el decodificador Brotli, provocado por una entrada comprimida mal formada. En términos sencillos, se puede engañar al decodificador para que escriba datos más allá del final de un búfer de memoria, lo que suele provocar fallos del sistema y la ejecución de código. Node.js le otorga una gravedad alta y describe el impacto como «ejecución remota de código».
Brotli es la biblioteca de compresión de Google, y Node.js incluye su propia versión. El fallo se encuentra en ese código integrado, por lo que solucionarlo implica actualizar el propio entorno de ejecución de Node.js. Node.js ejecuta el decodificador cada vez que descomprime datos Brotli, ya sea directamente a través del nodo:zlib módulo o automáticamente cuando fetch() recibe una respuesta enviada con compresión Brotli.
La solución consiste en un parche de origen del proyecto Brotli, del que Node.js ha seleccionado solo algunas partes (Commit de Brotli 0ed4268a (desde febrero). Esto hace que el decodificador detecte una entrada no válida y se detenga antes de escribir más allá del búfer. La misma corrección se incluyó en las versiones 1.2.1, 1.1.1 y 1.0.10 de Brotli, por lo que es posible que otros programas que incorporen Brotli también necesiten una actualización.
¿Qué gravedad tiene el CVE-2026-111497? ¿Se está aprovechando esta vulnerabilidad?
Node.js califica la vulnerabilidad como de gravedad alta, un nivel por debajo de «crítica», y la investigación pública ha avanzado rápidamente. Una primera prueba de concepto, publicada el 22 de octubre, logró la ejecución de código únicamente en una versión de prueba debilitada deliberadamente. Ese mismo día, los investigadores de seguridad informaron de la ejecución de código en la imagen oficial y sin modificar de Node.js 24.22.0 en Linux arm64, aunque su exploit no funcionó en todos los intentos, y Node.js 24.22.1 rechaza la misma entrada. Según The Hacker News, a fecha de 22 de octubre no se había informado de ningún caso de explotación en el mundo real.
De todos modos, trátalo como algo urgente. El fallo es una vulnerabilidad relacionada con la seguridad de la memoria en un componente de tiempo de ejecución que gestiona entradas de red no fiables; existen pruebas de concepto públicas y la solución consiste en una simple actualización de versión. Los servicios que llaman a servidores externos o aceptan cuerpos de solicitud comprimidos deben ser los primeros en ser corregidos.
Cómo comprobar si tu aplicación está expuesta
- Enumera todas las versiones de Node.js que tienes instaladas:
node --versiónen los servidores y en los ejecutores de CI, ydocker run --rm <image> node --versionpara cada imagen de contenedor. En un inventario de paquetes puede pasarse por alto un entorno de ejecución que esté incluido en una imagen. - Averigua dónde se introducen los datos de Brotli. Ejecuta
npm ls express body-parserpara detectar Express 5 y body-parser 2.x, y buscar en tu código (y en las dependencias)Descomprimir con BrotliycreateBrotliDecompressdesdenodo:zlib. - Enumera las salidas
fetch()las llamadas que se dirigen a servidores que no controlas, incluidas las entregas de webhooks y las URL facilitadas por los usuarios. - Actualiza primero los servicios que se ajusten a los pasos 2 o 3 y, después, el resto.
Un archivo Dockerfile fijado en nodo:24.22.0 sigue siendo vulnerable, por muchas veces que lo reconstruyas. Actualiza el pin a la versión 24.22.1 o posterior.
Qué hacer si todavía no puedes actualizar
El aviso de Node.js no ofrece ninguna solución provisional para la vulnerabilidad de Brotli. Estas medidas provisionales reducen el riesgo mientras preparas la actualización:
- Rechazar solicitudes codificadas con Brotli: descartar las solicitudes entrantes con
Content-Encoding: bren tu proxy inverso, equilibrador de carga o middleware de aplicaciones. Aikido utilizó esta solución provisional en los servicios internos que no se podían actualizar de inmediato. - Utiliza las reglas de perímetro cuando tu plataforma las ofrezca: Vercel añadió el 21 de octubre unas reglas de cortafuegos que bloquean el ataque en las solicitudes entrantes.
Ninguna de estas soluciones provisionales cubre las respuestas en formato Brotli que tu aplicación obtiene de otros servidores. Solo una actualización en tiempo de ejecución elimina el fallo, así que considera estas soluciones provisionales como un paso intermedio hasta entonces.
Cronología de Node2Shell
- Febrero de 2026: La corrección se incorpora por primera vez al código fuente de Brotli.
- 21 de octubre de 2026: Node.js lanza las versiones 22.23.4, 24.22.1 y 26.12.1. Brotli incorpora la misma corrección en las versiones 1.2.1, 1.1.1 y 1.0.10, y Vercel añade reglas de cortafuegos para las solicitudes entrantes.
- 22 de octubre de 2026: Se publica una prueba de concepto pública y los investigadores informan de la ejecución de código en una versión no modificada de Node.js 24.22.0.
Preguntas frecuentes
¿Qué es Node2Shell?
«Node2Shell» es el nombre con el que se conoce en Internet a la vulnerabilidad CVE-2026-111497, el fallo del decodificador Brotli en Node.js que, según el proyecto Node.js, puede permitir la ejecución remota de código.
¿Qué versiones de Node.js corrigen la vulnerabilidad CVE-2026-111497?
Node.js 22.23.4, 24.22.1 y 26.12.1, así como cualquier versión de parche más reciente de esas series. Node.js 25.x, 23.x, 20.x y versiones anteriores han llegado al final de su ciclo de vida y ya no reciben correcciones.
¿Se está aprovechando la vulnerabilidad CVE-2026-111497?
A fecha de 22 de octubre de 2026, no se había registrado ningún caso de explotación en entornos reales. Los investigadores han informado de la ejecución de código en una versión no modificada de Node.js 24.22.0 en condiciones de laboratorio, y la vulnerabilidad no funcionó en todos los intentos.
¿Body-parser o express.json() ¿Podría eso hacer que mi servidor sea vulnerable?
Sí, si tu analizador descomprime los cuerpos de las solicitudes en formato Brotli. Express 5 y body-parser 2.x lo hacen, por lo que un cliente puede enviar una solicitud manipulada Content-Encoding: br Solicitud. La solución es actualizar Node.js.
¿Hay alguna solución alternativa?
El aviso de Node.js no menciona ninguna. Rechazar las solicitudes codificadas con Brotli en el perímetro reduce la exposición entrante, pero no protege contra las respuestas Brotli que recaba tu aplicación.
¿Se ve afectado Bun?
Sí, las versiones anteriores a la 1.4.4 se ven afectadas. La versión 1.4.4 de Bun incluye la corrección, y el equipo de Bun la ha registrado en el problema 46352 de oven-sh/bun.