Fallo de corrupción de memoria en Brotli C (CVE-2026-111497) afecta Node.js, Bun y Python

Autor: Publicada 6 min de lectura 8 lecturas

Las imágenes de este artículo han sido generadas con inteligencia artificial. Cómo publicamos

Durante las últimas semanas se ha descubierto un fallo de corrupción de memoria en el decodificador C de Brotli —el algoritmo de compresión desarrollado por Google— que se propaga a los programas que incluyen esa implementación para descomprimir datos con Content-Encoding: br. El problema, registrado como CVE-2026-111497, permite que datos Brotli manipulados escriban más allá del final de un búfer y alteren la memoria del proceso vulnerable. En la práctica esto puede provocar bloqueos, fugas de memoria o, en escenarios favorables al atacante, la ejecución de código arbitrario.

Hechos confirmados: el defecto reside en el código C que descomprime flujos Brotli y, puesto que muchas aplicaciones y runtimes incorporan una copia local de ese código, la vulnerabilidad aparece en múltiples proyectos de forma independiente. Entre los afectados reportados están Node.js (parcheado), el runtime Bun, paquetes Python como Brotli y brotlicffi, y proxies como Envoy cuando la descompresión Brotli está activada. El fallo fue divulgado públicamente el 21 de octubre, con parches ya disponibles en algunos productos; sin embargo, cada proyecto debe actualizar su propia copia del decodificador porque no existe una única biblioteca compartida que se actualice globalmente. El repositorio oficial del proyecto se encuentra en https://github.com/google/brotli.

Fallo de corrupción de memoria en Brotli C (CVE-2026-111497) afecta Node.js, Bun y Python
Imagen generada con IA.

Cómo funciona técnicamente (resumen): Brotli opera con estructuras internas y ventanas deslizantes para reconstruir datos comprimidos. El bug es una corrupción de memoria clásica en C: una ruta de descompresión permite que entradas malformadas hagan que el algoritmo copie datos más allá de la memoria prevista para un búfer. Esto puede sobrescribir metadatos del proceso o datos críticos en la pila/heap. El efecto final depende del layout de memoria, protecciones del sistema (ASLR, DEP), y del binario concreto que contiene el decodificador; por eso el mismo defecto puede ser explotable en una build y no explotable en otra.

Qué se ha demostrado y qué no: el equipo de investigación de Imperva logró ejecutar código en una build no modificada de Node.js 24.22.0 para Linux ARM64 usando Brotli malicioso, tanto cuando el payload llegaba como respuesta fetch() como cuando se enviaba en el cuerpo de una petición Express. El exploit requirió varios intentos, no se ha publicado el PoC y los autores no afirmaron que funcione en otras builds o plataformas. OpenAI y otras firmas han confirmado que la vulnerabilidad puede dar lugar a ejecución remota en ciertas condiciones, pero no hay informes verificados de explotación en entornos reales hasta la fecha; CISA registró explotación como "ninguna". En resumen: existe una prueba de concepto privada para una configuración concreta de Node.js, mientras que la explotación en el resto del ecosistema sigue siendo incierta.

A quién afecta: cualquier software que descomprima Brotli con el decodificador C vulnerable y reciba datos controlados por un tercero. Ejemplos prácticos: en Node.js y Bun la exposición aparece cuando fetch() procesa una respuesta con Content-Encoding: br o cuando middleware como Express 5 o body-parser 2 descomprimen un cuerpo enviado por el cliente. Envoy o Istio sólo están en riesgo si la descompresión Brotli está activada (por ejemplo mediante un filtro); si está desactivada, la ruta de ataque queda cerrada. En Python la situación es más insidiosa: la mera presencia de los paquetes Brotli o brotlicffi en el entorno hace que clientes HTTP populares (requests, urllib3, httpx, aiohttp) puedan descomprimir respuestas Brotli de forma automática, por lo que una aplicación puede quedar expuesta sin importar si su código importa explícitamente Brotli. Las páginas de los paquetes en PyPI están en https://pypi.org/project/Brotli/ y https://pypi.org/project/brotlicffi/.

Consecuencias reales: dependiendo de la aplicación y de las mitigaciones del sistema, un atacante podría causar denegación de servicio (crash), filtrar memoria sensible o, en el peor caso, obtener ejecución remota dentro del proceso vulnerable. El impacto operativo es concreto: actualizaciones por producto, reinicios de servicios y reconstrucción de contenedores son necesarios porque un proceso que no se reinicie sigue usando la versión antigua del decodificador en memoria.

Medidas concretas que deben tomar administradores y desarrolladores (confirmadas y prácticas): 1) Actualizar cuanto antes el runtime o la librería a las versiones parcheadas publicadas por cada proyecto y reiniciar los procesos afectados; en entornos con contenedores, reconstruir las imágenes para que el binario parcheado esté presente al arrancar. 2) Si no puede actualizar de inmediato, deje de aceptar o procesar Brotli no fiable: rechace solicitudes entrantes que lleven Content-Encoding: br antes de que cualquier proxy o parser intente descomprimir el cuerpo. 3) Para clientes HTTP en los que controlar el comportamiento sea posible: desactive la descompresión automática de Brotli y, si procede, desinstale los paquetes Brotli/brotlicffi en entornos Python para forzar la caída a gzip/deflate. Importante: eliminar "br" del encabezado Accept-Encoding no garantiza protección —un servidor puede ignorar el encabezado y responder con Brotli—; por eso la recomendación es bloquear o rechazar explícitamente respuestas con Content-Encoding: br en la entrada/salida que controle.

Fallo de corrupción de memoria en Brotli C (CVE-2026-111497) afecta Node.js, Bun y Python
Imagen generada con IA.

Pasos específicos por plataforma (estado y recomendaciones): Node.js y Bun: actualizar a las versiones oficiales parcheadas. En Node.js no existe un workaround documentado que sustituya a la actualización; reiniciar el runtime es obligatorio. Envoy/Istio: actualizar a las versiones que incluyen la corrección o desactivar el filtro de descompresión Brotli si no es imprescindible. Python: eliminar los paquetes Brotli y brotlicffi del entorno si no puede instalar la versión parcheada de inmediato; además, configurar explicitamente clientes HTTP para no descomprimir respuestas br. Sistemas operativos y paquetes del sistema: las distribuciones corrigen sus paquetes en momentos distintos —por ejemplo, Debian publicó una corrección para brotli en Debian 13 el 23 de octubre en la versión 1.1.0-2+deb13u1— pero verifique la política de su distro y actualice.

Advertencias y elementos aún inciertos: aunque existe evidencia privada de ejecución de código en una build concreta de Node.js, no hay prueba pública sencilla de exploit que funcione en todas las plataformas. Las puntuaciones de gravedad varían entre proveedores: Google asignó una nota crítica (CVSS 4.0 9.2), mientras otros proyectos lo han catalogado como alto o importante según su propio contexto. Además, las herramientas de análisis de dependencias podrían no detectar automáticamente la condición en entornos Python, porque el CVE apunta al repositorio de Brotli y no originalmente a los paquetes PyPI; por ello es recomendable comprobar manualmente las versiones instaladas y las entradas de seguridad publicadas por los proyectos que utilice.

En resumen: el vector es claro y el remedio también —actualizar y reiniciar— pero la fragmentación del ecosistema (cada producto empaqueta su propia copia del decodificador) obliga a un esfuerzo coordinado por parte de administradores, desarrolladores y equipos de seguridad. Para instrucciones y referencias técnicas directas consulte las fuentes originales del proyecto Brotli en GitHub (github.com/google/brotli) y las páginas oficiales de los paquetes Python en PyPI (Brotli, brotlicffi), además de las alertas de seguridad de sus runtimes y distribuciones.

Cobertura

Relacionadas

Mas noticias del mismo tema.