Brotli CVE-2026-111497: cómo funciona la falla del decodificador que afecta a Node.js, Bun, Python, Envoy e Istio, y por qué tardó ocho meses en llegar

By Carlos Montiel | Especialista en IA Empresarial
Read in English →
Publicado: 2026-10-25 | Por: Carlos Montiel | Lectura: ~6 minutos
Brotli CVE-2026-111497: cómo funciona la falla del decodificador que afecta a Node.js, Bun, Python, Envoy e Istio, y por qué tardó ocho meses en llegar

Brotli es la compresión que tu navegador, tu CDN y tu runtime de Node.js usan sin que nadie lo piense. El 21 de octubre se corrigió en su decodificador una escritura fuera de límites que, con datos manipulados, puede terminar en ejecución de código. Lo interesante para quien opera servicios no es solo el bug, sino cuántas copias distintas del decodificador viven en tu stack.

Qué es CVE-2026-111497

Es una falla de corrupción de memoria en el decodificador C de Brotli: una entrada comprimida manipulada puede escribir más allá del final de un búfer. Los resultados posibles son caída, fuga de memoria o ejecución de código controlado por el atacante. Se divulgó el 21 de octubre de 2026, cuando Node.js y Google publicaron correcciones, y otros productos siguieron. Según The Hacker News, el reporte llegó del equipo Codex Security de OpenAI; Node.js acredita a Khai Tran y Sylvie Mayer, y a los mantenedores Matteo Collina y Antoine du Hamel por el arreglo.

Ojo con la severidad: Google la califica 9,2 (crítica, CVSS 4.0); Node.js la califica alta y Red Hat 8,1 (importante). Además, algunos medios citan identificadores distintos a los del aviso oficial de Node.js: verificá el CVE contra el aviso del proveedor antes de usarlo en un ticket.

Quién está afectado y qué versión corrige

Brotli (biblioteca C) 1.0.3 a 1.2.0 → 1.0.10, 1.1.1, 1.2.1 Node.js 22.x, 24.x, 26.x → 22.23.4, 24.22.1, 26.12.1 20.x y anteriores: fin de vida, sin parche Bun 1.4.3 y anteriores → 1.4.4 Envoy 1.36–1.39 → 1.36.12, 1.37.8, 1.38.6, 1.39.3, 1.40.0 Istio 1.29–1.31 → 1.29.9, 1.30.6, 1.31.2 Python Brotli/brotlicffi 1.2.0 y anteriores → 1.2.1 / 1.2.1.0

Envoy e Istio solo son vulnerables si el descompresor Brotli está configurado o habilitado. El release de Node.js del 21 de octubre corrigió diez fallas en total, cuatro de ellas altas, y no publicó ninguna mitigación alternativa: la única salida es actualizar.

Cómo se llega a ejecutar el código: las condiciones de exposición

El decodificador solo es peligroso cuando procesa datos que no controlás. En Node.js y Bun eso ocurre al leer con fetch() una respuesta con Content-Encoding: br, o al parsear cuerpos de petición con Brotli en Express 5 o body-parser 2; un servidor HTTP básico de Node no decodifica cuerpos por sí mismo. En Python basta con tener instalado Brotli o brotlicffi: clientes como requests, urllib3, httpx y aiohttp decodifican Brotli automáticamente. Imperva Red Team, que llama a su trabajo Node2Shell, demostró ejecución de código en un Node.js 24.22.0 Linux ARM64 sin modificar; el exploit requirió varios intentos, no está publicado y no se probó en otras compilaciones. Hasta el 23 de octubre CISA lo evaluaba sin explotación conocida y Red Hat indicaba que no hay prueba de concepto pública fiable.

Por qué tardó ocho meses: el problema de las copias

El arreglo se confirmó en el código fuente de Brotli el 27 de febrero de 2026, pero ninguna versión nueva lo incluyó hasta el 21 de octubre. OpenAI sostuvo que la causa raíz "estaba arreglada en el código fuente de Brotli desde febrero". Cada runtime (Node.js, Bun, paquetes de Python, Envoy) empaqueta su propia copia, de modo que un arreglo en el repositorio no protege a nadie hasta que cada proyecto lo incorpora y lo libera. Para fines de esta semana, Debian ya había corregido su paquete en Debian 13 y Amazon Linux 2023 aún lo listaba como pendiente el 22 de octubre. GitHub no listaba un paquete afectado en su base de avisos, así que Dependabot puede no alertarte por los paquetes de Python.

Mitigaciones si no podés actualizar hoy

Qué significa para una empresa que opera servicios con IA

Lectura para tu empresa: tus agentes y pipelines de IA hacen fetch() a muchas URLs externas, justo la condición que activa este bug. Hacé un inventario de qué runtimes (Node, Bun, Python) corren en tus servicios de IA y qué versión de Brotli empaquetan, prioriza los que consumen contenido de terceros, y no asumas que tu escáner de dependencias lo marcará. El caso también ilustra una tendencia: que sea una herramienta de IA la que reporte la falla acorta el tiempo entre descubrimiento y divulgación, pero no el tiempo que tarda tu cadena de actualización.
Carlos Montiel
Arquitecto de Soluciones IA Empresarial
Especialista en LLMs, Agentes y Orquestación
guatemalia.com/#contacto · info@guatemalia.com

¿Necesitas implementar IA en tu empresa?

Carlos Montiel es arquitecto de soluciones IA empresarial. Implementa LLMs, Agentes, RAG y orquestadores en empresas de Guatemala y Latinoamérica. Contáctalo para una consultoría.

Contactar a Carlos Montiel

info@guatemalia.com