Alerta

Logo de Node.js

Alerta 2026-124 Vulnerabilidad crítica en Node.js (Node2Shell)

Producto(s) afectado(s): 

ProductoVersiones afectadas
Node.js22.x anteriores a 22.23.4,
24.x anteriores a 24.22.1 y
26.x anteriores a 26.12.1
Google BrotliDesde 1.0.3 hasta 1.2.0
BunAnteriores a 1.4.4
Brotli (paquete PyPI)1.2.0 y anteriores
brotlicffi (paquete PyPI)1.2.0.2 y anteriores

Las ramas de Node.js sin soporte (EoL) también se consideran afectadas.

Descripción

Se ha publicado una vulnerabilidad de escritura fuera de límites (out-of-bounds write) en Node.js, conocida como Node2Shell e identificada como CVE-2026-111497 (CVSSv4 9.2 – CRÍTICO). Un atacante remoto sin autenticación puede enviar datos comprimidos con Brotli especialmente diseñados y corromper la memoria del proceso, lo que puede provocar una denegación de servicio, la divulgación de memoria o la ejecución remota de código. La falla se puede alcanzar a través de fetch(), de los cuerpos de solicitud procesados por Express 5 con body-parser 2.x y de node:zlib. Está corregida en Node.js 22.23.4, 24.22.1 y 26.12.1.

El origen de la vulnerabilidad está en el decodificador de Google Brotli (c/dec/decode.c), que Node.js incluye en su código. Cuando un flujo comprimido solicita un cambio de bloque inválido, la función DecodeBlockTypeAndLength() devuelve un valor que la ruta rápida de decodificación no verifica (CWE-252, valor de retorno no verificado). El decodificador sigue procesando con un estado interno corrupto y escribe fuera de los límites de su búfer (CWE-787, escritura fuera de límites). Están afectadas las versiones de Brotli desde 1.0.3 hasta 1.2.0, corregidas en 1.0.10, 1.1.1 y 1.2.1, publicadas el 21/10/2026.

Como el código vulnerable está en la librería de Brotli, también afecta a Bun, corregido en la versión 1.4.4, y a los paquetes de Python Brotli y brotlicffi de PyPI, corregidos en 1.2.1 y 1.2.1.0. Los paquetes de Python se actualizaron sin mencionar la vulnerabilidad en sus notas de versión, por lo que los escáneres de dependencias pueden no detectarlos como vulnerables. La vulnerabilidad fue divulgada por Imperva. A la fecha de este boletín, no se ha reportado explotación activa.

Mitigación

Si no es posible actualizar de inmediato, OpenSourceMalware indica dos alternativas temporales hasta aplicar la actualización en entornos Python:

  • Desinstalar los paquetes Brotli y brotlicffi. Sin ellos, los clientes HTTP como urllib3 (y por lo tanto requests), httpx, aiohttp y Scrapy pasan a usar gzip/deflate.
  • Quitar br del encabezado Accept-Encoding en las solicitudes salientes y rechazar Content-Encoding: br en las solicitudes entrantes.

Solución

La solución consiste en actualizar Node.js, Bun y los paquetes de Python a las versiones corregidas, y en actualizar Brotli en cualquier software que incluya la librería.

ProductoVersión corregida
Node.js 22.x22.23.4
Node.js 24.x24.22.1
Node.js 26.x26.12.1
Google Brotli1.0.10, 1.1.1 o 1.2.1
Bun1.4.4 o posterior
Brotli (paquete PyPI)1.2.1
brotlicffi (paquete PyPI)1.2.1.0

En entornos Python:

pip install -U "Brotli>=1.2.1" "brotlicffi>=1.2.1.0"

Se recomienda revisar a mano las dependencias transitivas, ya que los escáneres pueden no marcar estos paquetes, y reconstruir los contenedores e imágenes que incluyan versiones vulnerables. Se deben priorizar los servicios que descomprimen contenido Brotli de fuentes no confiables.

Versiones de Node.js:

https://nodejs.org/en/blog/vulnerability/october-2026-security-releases

Versiones de Google Brotli:

https://github.com/google/brotli/releases

Bun 1.4.4:

https://bun.com/blog/bun-v1.4.4

Información adicional: