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.
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.
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.
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.
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.
Content-Encoding: br antes de que cualquier proxy o parser las decodifique.Brotli y brotlicffi para que se use gzip/deflate.br de Accept-Encoding no sirve: un servidor puede responder Brotli igual.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 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