El 27 de octubre de 2026 CISA añadió CVE-2026-111497, el fallo del decodificador Brotli de Google, a su catálogo Known Exploited Vulnerabilities (KEV) por indicios de explotación activa. El proyecto Node.js había publicado su aviso sobre el decodificador incluido seis días antes, el 21 de octubre de 2026. Para parchear lo que figura en el KEV de CISA, la inclusión en el catálogo aumenta la urgencia, pero no resuelve la parte difícil de esta vulnerabilidad de Brotli: encontrar todas las copias del decodificador en tu infraestructura.
Qué es el fallo y qué añade KEV
El error está en el decodificador Brotli incluido con Node.js. Un cambio de bloque no válido se notificaba como necesidad de más datos de entrada en lugar de como error de formato, así que el decodificador seguía añadiendo datos a un búfer interno de ocho bytes y escribía más allá de su límite. La explotación requiere datos Brotli aportados por el atacante que una aplicación descomprima con node:zlib.
La inclusión en el catálogo es el único dato nuevo. A 26 de octubre, Tenable indicaba que el CVE no figuraba en KEV y Rapid7 no conocía ninguna explotación en entornos reales. El propio registro de CISA recogía SSVC exploitation «none», automatable «no» y technical impact «total». No hemos encontrado ninguna fuente que diga quién lo explota ni cómo. Existe código de prueba de concepto público e Imperva comunicó ejecución de código en laboratorio en Node.js 24.22.0 (arm64) que necesitó varios intentos; un resultado de laboratorio no es prueba de ataques en entornos reales.
Las páginas de los fabricantes también van con retraso. El aviso de Palo Alto Networks, actualizado el 27 de octubre, sigue diciendo que no tiene constancia de ninguna explotación maliciosa, lo que contradice la inclusión en el catálogo. El FG-IR-26-187 de Fortinet muestra «Known Exploited: No» en la tabla de su cabecera junto a un CVE distinto, el fallo de nombre de host TLS. Lee los campos de estado como marcas de tiempo, no como veredictos.
Versiones corregidas que debes comprobar primero
La actualización de seguridad de Node.js incluye correcciones en 22.23.4, 24.22.1 y 26.12.1. Las versiones 20.x y anteriores de Node.js han llegado al final de su vida útil y no reciben corrección, así que para ellas la respuesta es actualizar o aplicar un control compensatorio. El proyecto Brotli publicó la misma corrección en 1.2.1, 1.1.1 y 1.0.10; los rangos afectados van desde la 1.0.3 hasta la anterior a la 1.0.10, desde la 1.1.0 hasta la anterior a la 1.1.1 y desde la 1.2.0 hasta la anterior a la 1.2.1.
Fuera de Node.js, estos son los fabricantes que citan Rapid7 y Wiz:
- Bun: afectadas de la 1.0.21 a la 1.4.3, corregido en 1.4.4.
- .NET: corregido en 8.0.33, 9.0.22 y 10.0.14.
- Python: Brotli 1.2.1 y brotlicffi 1.2.1.0.
- También citados por Rapid7: Envoy e Istio, brotli4j y paquetes del sistema operativo.
Por qué tu gestor de paquetes no informa de nada
El código vulnerable está compilado dentro del runtime de Node.js, en deps/brotli. El paquete de npm llamado «brotli» no guarda relación con él, así que un npm ls limpio no te dice nada sobre este fallo.
Un gestor de paquetes informa de lo que se instaló. No puede informar de lo que se compiló dentro.
La versión incluida también varía según la rama de versiones. HeroDevs lee Brotli 1.1.0 en Node.js 20.x y 18.x y 1.0.9 de la 16.x a la 12.x; es la lectura del código de un solo proveedor, así que compruébala con tus propios binarios. Las distribuciones también difieren: el nodejs de Debian usa la biblioteca Brotli del sistema, mientras que Ubuntu dice que su nodejs usa Brotli incluido en el propio paquete (vendored). El mismo nombre de paquete puede implicar dos vías de parcheo distintas.
Crea un inventario de bibliotecas incrustadas de fuera hacia dentro
Un inventario de bibliotecas incrustadas hay que construirlo por capas, porque cada capa oculta la copia de una forma distinta.
- Runtimes: enumera todos los hosts y las imágenes de contenedor que incluyan Node.js, Bun, .NET, Python con Brotli o brotlicffi, o una aplicación JVM que use brotli4j. Para un binario de Node.js de nodejs.org o copiado en una imagen, compara su versión con las versiones corregidas. En los paquetes de estilo Debian que enlazan la biblioteca del sistema, la versión de Node.js no basta: comprueba en su lugar el paquete Brotli de la distribución y su aviso de seguridad. No disponemos de un único comando para leer la versión de Brotli incluida en todos los runtimes, así que confírmala runtime por runtime.
- Imágenes y cachés de compilación: un runtime copiado en una imagen nunca aparece en la lista de paquetes del sistema operativo. Busca en todas las capas de imagen y cachés de compilación binarios de Node.js por la cadena de versión y asocia cada rama de versiones con el linaje de
deps/brotlique incluye (1.1.0 para 20.x y 18.x, 1.0.9 de la 16.x a la 12.x, según HeroDevs). Considera que cualquier rama sin versión corregida no se puede parchear en el propio sitio. - Proxies y service mesh: Envoy e Istio figuran en la lista de Rapid7. Comprueba la versión en cada imagen de sidecar y de gateway, no solo en el plano de control.
- Appliances: Palo Alto Networks señala como afectadas las versiones PAN-OS 12.2, 12.1 y 11.2 anteriores a los hotfixes indicados, además de Prisma Cloud Application Security Transporter Client anterior a la 0.2.9. PAN-OS 11.1 y 10.2 no están afectados y Panorama no se ve impactado. En un firewall,
show system setting brotlimuestra el estado yset system setting brotli-encoding disabledesactiva la decodificación. El Threat ID 97686 (versión de contenido 9165 o posterior) ofrece solo cobertura parcial. - Listas de fabricantes que aún cambian: Fortinet dice que está «investigando actualmente» FortiOS, FortiProxy, FortiMail y FortiSandbox, y da FortiManager, FortiAnalyzer y FortiWeb por no afectados. No hemos podido verificar el aviso ni la lista de productos de Cisco, así que léelos directamente en Cisco; desconocemos su estado. Vuelve a comprobar la página de cada fabricante antes de cerrar un ticket.
En nuestra práctica de Ciberseguridad hacemos análisis de vulnerabilidades y cartografía de la superficie de ataque externa, y lo segundo responde a lo que lo primero no puede: cuáles de estas copias puede alcanzar de verdad un desconocido desde internet. El inventario te dice dónde está el decodificador; la cartografía te dice cuáles de esos lugares importan primero.
Prioriza las copias que descomprimen entradas no confiables
El análisis de Akamai es el filtro útil. Entre las rutas expuestas están las respuestas del fetch() integrado y los cuerpos de petición que procesa Express 5, mientras que un servidor HTTP básico de Node.js no decodifica por sí solo los cuerpos Brotli entrantes. En PAN-OS, la exposición afecta a los firewalls PA-Series y VM-Series con la inspección Brotli y el descifrado TLS activados en el dataplane; la interfaz de gestión no está afectada.
Clasifica lo que encuentres siguiendo este orden:
- Servicios expuestos a internet que procesan cuerpos de petición codificados en Brotli, como las aplicaciones Express 5.
- Dispositivos en línea que descifran e inspeccionan el tráfico con la decodificación Brotli activada.
- Servicios que llaman a
fetch()contra servidores que no controlas, ya que la respuesta son datos aportados por el atacante. - Herramientas internas y trabajos por lotes que solo descomprimen datos que has generado tú.
La BOD 26-04 de CISA, emitida el 10 de junio de 2026, es un modelo razonable para esta clasificación aunque solo obliga a las agencias civiles federales de EE. UU. Puntúa cada par de activo y vulnerabilidad según exposición, estado en KEV, automatización e impacto técnico, y la inclusión en KEV por sí sola ya no fija el plazo. Sus plazos completos entran en vigor el 7 de diciembre de 2026.
Cuando no puedas parchear, como en Node.js 20.x, deja de aceptar cuerpos de petición codificados en Brotli donde la aplicación no los necesite. Eso solo cierra la vía de las peticiones: las respuestas de fetch() de servidores que no controlas siguen expuestas hasta que se parchee el runtime. Incluye el runtime al final de su vida útil en la lista de migración, porque el próximo fallo de una biblioteca incluida lo encontrará en el mismo sitio.
Fuentes
- CVE-2026-111497 Google Brotli: Google Brotli Unchecked Return Value Vulnerability (actively exploited, CISA KEV) (CISA known exploited vulnerabilities) (se abre en una pestaña nueva)
- Vulnerabilities in node.js Affecting Cisco Products: October 2026 (Cisco security advisories) (se abre en una pestaña nueva)
- Multiple Node.js CVEs (Fortinet PSIRT) (se abre en una pestaña nueva)
- CVE-2026-111497 Portfolio Status: Impact of Brotli Vulnerability (CVE-2026-111497) on Palo Alto Networks Products (Severity: CRITICAL) (Palo Alto Networks advisories) (se abre en una pestaña nueva)
- CISA Adds Two Known Exploited Vulnerabilities to Catalog (CISA advisories) (se abre en una pestaña nueva)
- Brotli2Shell: Google Brotli decoder (CVE-2026-111497) (se abre en una pestaña nueva)
- CVE-2026-111497: Critical out-of-bounds write in the Node.js Brotli decoder (se abre en una pestaña nueva)
- CVE-2026-111497 (Node2Shell): Node.js Brotli RCE Fix (se abre en una pestaña nueva)
- Node.js — Wednesday, October 21, 2026 Security Releases (se abre en una pestaña nueva)
- Inside Node2Shell: A Closer Look at CVE-2026-111497 (se abre en una pestaña nueva)
- Broccoli2shell: Everything You Need To Know About The Critical Brotli Decoder Vulnerability (se abre en una pestaña nueva)
- FedRAMP Response to CISA BOD 26-04 (Prioritizing Security Updates Based on Risk) (se abre en una pestaña nueva)
- Brotli and Cisco: CVE-2026-111497 status — CONFIGLANE (se abre en una pestaña nueva)




