Mastodon Mastodon Mastodon Mastodon

CVE-2026-111497: vulnerabilidad en el decodificador Brotli afecta a Node.js, Bun, Python y Envoy

Foto del autor

CyberSecureFox Editorial Team

Publicado:

Actualizado:

La vulnerabilidad CVE-2026-111497 en el decodificador de compresión Brotli de Google permite realizar una escritura fuera de los límites del búfer al procesar datos comprimidos especialmente manipulados. Dado que multitud de productos de software —desde Node.js y Bun hasta paquetes de Python y los proxies Envoy— incluyen su propia copia de este decodificador, el alcance del software afectado ha resultado ser considerable. Investigadores de Imperva demostraron la ejecución de código arbitrario en una build sin modificar de Node.js 24.22.0 para Linux arm64. Los parches ya están disponibles: actualizar el runtime o la biblioteca es la única forma fiable de corregirla.

Esencia técnica de la vulnerabilidad

La vulnerabilidad se clasifica como CWE-787 (escritura fuera de los límites del búfer) y se encuentra en el código C del decodificador Brotli. Según la entrada en GitHub Advisory Database, el problema se produce al procesar un flujo Brotli cuya estructura declarada de bloques conduce a un cambio de tipo de bloque imposible. El decodificador vulnerable interpreta este estado como una solicitud de datos adicionales y continúa trabajando en un estado no válido, lo que provoca una escritura fuera del búfer asignado. La versión corregida, en cambio, detiene la decodificación con un error de formato.

Las valoraciones de criticidad difieren según el contexto del producto. GitHub Advisory Database indica 9.2 Critical según CVSS v4.0. Red Hat evalúa la vulnerabilidad como Important con una puntuación de 8.1 según CVSS v3.1. Node.js le asigna un nivel High. Istio, en el contexto de su producto, indica 7.7. Este abanico refleja las diferentes condiciones de alcanzabilidad del código vulnerable en cada producto, y ninguna de estas valoraciones debe considerarse universal.

La historia del parche es llamativa: el parche que corrige la causa raíz se añadió al código fuente de Brotli ya el 27 de febrero; sin embargo, en ese momento no se sabía que el cambio subsanaba una vulnerabilidad de seguridad, y no se publicó una nueva versión de Brotli con esta corrección hasta el 21 de octubre. Los detalles están disponibles en la página de NVD.

Productos afectados y condiciones de explotación

La característica clave de esta vulnerabilidad es que cada producto afectado distribuye su propia copia del decodificador Brotli, por lo que cada uno debe actualizarse de forma independiente. Lista confirmada de software afectado:

  • Node.js: ramas 22.x, 24.x y 26.x. Versiones corregidas: 22.23.4, 24.22.1 y 26.12.1 (aviso de seguridad de Node.js)
  • Bun: versiones desde 1.0.21 hasta 1.4.3. Corregido en 1.4.4 (aviso de seguridad de Bun)
  • Paquete Brotli de Python (PyPI): versiones desde 1.0.3 hasta 1.2.0. Corregido en 1.2.1
  • Paquete brotlicffi de Python (PyPI): igualmente afectado
  • Envoy: cuando la descompresión Brotli está habilitada (aviso de seguridad de Envoy)
  • Istio: versiones 1.29.0–1.29.8, 1.30.0–1.30.5, 1.31.0–1.31.1 cuando se utiliza la ruta afectada de Envoy

Las condiciones de explotación dependen de la configuración. Un programa solo es vulnerable si decodifica datos Brotli procedentes de una fuente no confiable. Para Node.js y Bun, esto sucede al leer una respuesta con cabecera Content-Encoding: br mediante el fetch() integrado, así como al descomprimir el cuerpo de la solicitud a través de middleware. El propio servidor HTTP de Node.js no decodifica el cuerpo de la solicitud en formato Brotli: para ello se necesita una llamada explícita o middleware. Según la documentación de Express 5, los middleware express.json(), express.urlencoded(), express.text() y express.raw() ahora admiten descompresión Brotli, lo que crea un vector de ataque de entrada en las rutas donde estos manejadores están activos.

En Python la situación es especialmente engañosa: basta con que el paquete Brotli o brotlicffi esté instalado para que los clientes HTTP requests, urllib3, httpx y aiohttp empiecen a decodificar automáticamente las respuestas en formato Brotli, sin necesidad de importar explícitamente Brotli en el código de la aplicación.

Para Envoy e Istio, la vulnerabilidad solo es alcanzable cuando la descompresión Brotli está habilitada mediante el filtro correspondiente.

Estado de explotación y demostración

El estado de explotación es: existe un PoC público. En el marco de la demostración Node2Shell, investigadores de Imperva lograron la ejecución de código arbitrario en una build estándar de Node.js 24.22.0 para Linux arm64, sin depurador y sin una build modificada. El exploit se reprodujo a través de ambos vectores: el cuerpo de la solicitud entrante (Express 5) y la respuesta recibida mediante fetch(). No obstante, la explotación no fue estable y requería varios intentos; no se probaron otras arquitecturas ni las ramas 22.x y 26.x.

Según el aviso de seguridad de Vercel, los investigadores también demostraron una fuga de memoria del proceso y la ejecución de comandos en ramas de Node.js sin parchear. En el momento de la publicación no se han observado explotaciones en ataques reales. La vulnerabilidad no está incluida en el catálogo CISA KEV.

Limitaciones de la protección WAF

Vercel desplegó reglas WAF el 21 de octubre para bloquear los ataques entrantes. Sin embargo, tal como se indica explícitamente en el aviso de Vercel, estas reglas no cubren las respuestas en formato Brotli que la aplicación recibe de servidores externos. Se trata de una limitación fundamental: la telemetría del WAF puede detectar parte de los intentos de ataque en el tráfico entrante, pero no puede proteger frente a respuestas maliciosas que la aplicación reciba al acceder a recursos externos. Por ello, el inventario de runtimes y la reconstrucción de las imágenes de contenedor siguen siendo obligatorios.

Recomendaciones

Debe darse prioridad a la actualización de los servicios y clientes accesibles desde Internet que decodifican automáticamente datos Brotli no confiables. El mero hecho de recibir tráfico HTTP no implica que Node.js sea vulnerable: es necesario que exista código o middleware que realice la descompresión.

  • Actualice el runtime o la biblioteca a una versión corregida. Tras la actualización, reinicie el servicio y reconstruya las imágenes de contenedor: el proceso en ejecución seguirá utilizando el decodificador antiguo hasta que se reinicie.
  • Las ramas Node.js 20.x y anteriores no recibirán un parche: es necesario migrar a una rama con soporte.
  • Si no es posible actualizar de inmediato: rechace las solicitudes entrantes con cabecera Content-Encoding: br antes de que el proxy o el parser inicien la descompresión; desactive la descompresión automática de Brotli en los clientes HTTP.
  • En Python: elimine los paquetes Brotli y brotlicffi para que los clientes vuelvan a gzip y deflate.
  • Revise sus escáneres de dependencias: la entrada CVE hace referencia al repositorio de Google Brotli y no a los paquetes de PyPI, y GitHub Advisory en el momento de la publicación no indicaba el paquete afectado, por lo que Dependabot puede no activarse. Las entradas PYSEC-2026-4322 y PYSEC-2026-4323 se añadieron el 23 de octubre; compruebe manualmente las versiones instaladas.

Eliminar br de la cabecera Accept-Encoding por sí solo no protege: el servidor puede enviar una respuesta en formato Brotli independientemente de las preferencias del cliente. Para Node.js no se ha publicado ninguna solución temporal dentro del runtime: la actualización es la única forma de eliminar la vulnerabilidad.

Actualice todas las instancias de los runtimes y bibliotecas afectados, prestando especial atención a los servicios que procesan tráfico Brotli no confiable en ambas direcciones: tanto en la entrada como al recibir respuestas de servidores externos. Anteriormente escribimos sobre los parches de seguridad en los productos de Google; CVE-2026-111497 confirma que los componentes de Google integrados en productos de terceros requieren un seguimiento y actualización independientes.


CyberSecureFox Editorial Team

El equipo editorial de CyberSecureFox cubre noticias de ciberseguridad, vulnerabilidades, campañas de malware, actividad de ransomware, AI security, cloud security y security advisories de proveedores. Los materiales se preparan a partir de official advisories, datos de CVE/NVD, alertas de CISA, publicaciones de proveedores e informes públicos de investigadores. Los artículos se revisan antes de su publicación y se actualizan cuando aparece nueva información.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.