Todos los artículos

Noticias26 de octubre de 20266 min de lectura

Brotli CVE-2026-111497 en el KEV: parches para .NET, PHP y Node.js

Fallo de Brotli CVE-2026-111497 (Node2Shell): parches fuera de ciclo para .NET, Node.js, Python y PHP en Windows, PoC públicos y entrada en el KEV de CISA.

Nube de palabras sobre ciberseguridad, con software, virus y protección, junto a un hombre con camisa y corbata

El domingo 25 de octubre de 2026 Microsoft publicó actualizaciones fuera de ciclo de .NET para CVE-2026-111497, una escritura fuera de límites en el decodificador de Brotli, la biblioteca de compresión desarrollada por Google. El fallo se conoce con varios nombres: Node2Shell (puesto por Imperva), Broccoli2Shell, HTTP2Shell y Brotli2Shell. El 27 de octubre la CISA lo añadió a su catálogo KEV de vulnerabilidades explotadas, con plazo hasta el 10 de noviembre para las agencias federales estadounidenses.

Nuestro artículo del 21 de octubre sobre las versiones de seguridad de Node.js citaba esta CVE entre las cuatro de gravedad alta, sin detalles. La historia ha corrido en paralelo con PHP2Shell, sobre la que escribimos el 20 y el 23 de octubre: según el titular de un artículo de The Hacker News, el proyecto PHP también ha publicado para Windows una segunda actualización de seguridad en cinco días para corregir el fallo de Brotli. El texto de ese artículo no estaba disponible: el dato sobre PHP procede solo de esta fuente. A continuación, las novedades: la causa, quién debe actualizar y el estado de los exploits.

El fallo

Según la descripción publicada por el NVD, el defecto está en el decodificador (c/dec/decode.c) de Brotli de la 1.0.3 a la 1.2.0, en todas las plataformas. Un atacante remoto y no autenticado, con un flujo comprimido manipulado, puede corromper la memoria del decodificador, leer datos sensibles, bloquear el proceso o, en algunos casos, ejecutar código.

El mecanismo, descrito en el aviso de Node.js y en el PoC publicado en GitHub: ante un cambio de bloque no válido, la función DecodeBlockTypeAndLength() devuelve un valor ambiguo, que la ruta rápida del decodificador interpreta como «faltan datos» en lugar de como error de formato. El decodificador sigue añadiendo bytes a un búfer interno de ocho bytes y escribe más allá de sus límites. Las debilidades son CWE-252 (valor de retorno no comprobado) y CWE-787 (escritura fuera de límites).

El nombre HTTP2Shell engaña: el fallo no afecta solo a HTTP/2. Está expuesta cualquier aplicación que descomprima datos Brotli controlados por un atacante, en dos direcciones: una petición comprimida enviada a un servidor o una respuesta comprimida servida a un cliente que descarga una URL.

Sobre la gravedad las fuentes difieren: CVSS 4.0 9.2 (crítica) según Google, que asignó la CVE; CVSS 3.1 8.1 en el aviso de Microsoft, con la valoración «Exploitation More Likely»; gravedad «alta» para Node.js.

La corrección estaba en el código de google/brotli desde el 27 de febrero de 2026, sin versión ni aviso, y según Help Net Security permaneció públicamente legible durante ocho meses. Las versiones corregidas no salieron hasta el 21 de octubre. El descubrimiento se atribuye a Khai Tran y Sylvie Mayer, de OpenAI Codex Security.

Quién debe actualizar

Componente Versiones corregidas
Google Brotli 1.0.10, 1.1.1, 1.2.1
Node.js 22.23.4, 24.22.1, 26.12.1
.NET (runtime) 8.0.33, 9.0.22, 10.0.14; .NET 11 RC3
Python Brotli 1.2.1
Python brotlicffi 1.2.1.0
  • Node.js: las líneas sin soporte 20.x, 23.x y 25.x están afectadas, pero no recibirán corrección.
  • .NET: según Microsoft, la descompresión Brotli no está activa por defecto. Están afectadas las aplicaciones que usan la descompresión de peticiones de ASP.NET Core, la descompresión automática de respuestas de HttpClient o las API Brotli de System.IO.Compression. Las aplicaciones self-contained o Native AOT deben recompilarse: actualizar el runtime compartido no sustituye el decodificador incluido en el ejecutable. Según el resumen de Infosecurity Magazine, las actualizaciones corrigen también otra vulnerabilidad de .NET y defectos no resueltos del todo en una versión anterior.
  • Python: los clientes HTTP urllib3[brotli], requests, httpx y aiohttp[speedups] están expuestos si usan un decodificador vulnerable.
  • Otros productos: según The Register, también Bun, Envoy e Istio han publicado correcciones; Tenable cita además FFmpeg, Apache Arrow y ClickHouse entre los productos potencialmente afectados. Las distribuciones Linux están publicando paquetes corregidos.

Exploits y explotación

Hay PoC públicos en GitHub. El descrito por CSO Online ataca Node.js 24.22.0 Linux x86-64, depende del binario y de la disposición de la memoria y a veces necesita varios intentos; contra la 24.22.1 falla. Imperva logró ejecutar código en la imagen oficial de Node.js 24.22.0 para Linux arm64, tras varios intentos. JFrog mostró una ruta que no pasa por HTTP: FFmpeg llega a Brotli a través de libjxl, que descomprime los metadatos de las cajas brob de las imágenes JPEG XL; en Apache Arrow consiguió una denegación de servicio.

Sobre la explotación real las fuentes no coinciden. BleepingComputer, CSO Online y CyberScoop no informan de ataques, y el aviso de Microsoft no los menciona. Según Help Net Security, en cambio, el 26 de octubre ELLIO registró intentos de ataque reales con el exploit público, procedentes de 94.154.43.7, una dirección ya vista con exploits de PHP2Shell y escaneos de GlobalProtect, FortiOS SSL VPN y API de Kubernetes. Al día siguiente la CISA incluyó la CVE en el KEV, sin indicar su uso en campañas de ransomware.

MITRE ATT&CK (clasificación nuestra): T1190 para los servicios expuestos que descomprimen peticiones, T1203 para los clientes que reciben respuestas maliciosas.

Impacto para las empresas europeas e italianas

Brotli está integrado en runtimes, proxies, pasarelas de API y herramientas multimedia: según Wiz, el 91 % de los entornos cloud tiene recursos vulnerables y el 82 % tiene instancias de Node.js expuestas. Rapid7 y watchTowr recuerdan, sin embargo, que tener el decodificador no significa estar expuesto: lo que cuenta es si la aplicación descomprime datos controlados por un atacante.

Para las entidades sujetas a NIS2, el caso afecta a la gestión de vulnerabilidades y a la seguridad de la cadena de suministro (artículo 21): conviene documentar qué aplicaciones incluyen Brotli, cuáles se han actualizado y cuáles siguen en runtimes sin soporte.

Qué hacer ahora

  1. Haz inventario: node --version, dotnet --list-runtimes, pip show brotli brotlicffi, paquetes libbrotli de la distribución, imágenes de contenedores, Envoy e Istio, FFmpeg con libjxl.
  2. Actualiza a las versiones de la tabla, empezando por los servicios que reciben peticiones comprimidas y los clientes que descargan contenido externo.
  3. Reconstruye y reinicia: nuevas imágenes de contenedores, recompilación de las aplicaciones .NET self-contained y Native AOT, reinicio de los procesos. Actualizar la biblioteca del sistema no corrige las copias incluidas en Node.js y en las aplicaciones.
  4. Si no puedes actualizar enseguida: bloquea en el proxy o el firewall las peticiones entrantes con Content-Encoding: br y quita el soporte Brotli de las aplicaciones Python. Sigue abierta la ruta de las respuestas comprimidas que reciben los clientes.
  5. Migra las líneas 20.x, 23.x y 25.x de Node.js, que no tendrán corrección.
  6. Vigila los cierres anómalos de los procesos que descomprimen datos y el tráfico procedente de 94.154.43.7.

Cómo ayuda ARXDOME

El inventario de ARX Sentry enumera el software y los procesos de los servidores con el agente: ayuda a encontrar Node.js, .NET y Python. ARX Shield muestra las vulnerabilidades abiertas por máquina y por paquete, con las ya explotadas destacadas; las copias de Brotli incluidas en las aplicaciones deben comprobarse aparte. ARX Expose indica qué servicios públicos de tu empresa exponen productos reconocidos.

Última actualización:

¿Tienes preguntas?

Hablemos de las necesidades de tu empresa, sin compromiso.

Contáctanos

Artículos relacionados