Arncof
Artículos

Si usas Node.js, Bun o Envoy, revisa Brotli: el fallo que encontraron los agentes de OpenAI

CVE-2026-111497 permite ejecutar código con datos comprimidos en Brotli. Qué versiones lo corrigen, dónde más puede estar escondido y cómo bloquearlo mientras actualizas.

Seguridad · · · 4 min de lectura
En este artículo

Si tu servidor descomprime datos en Brotli que llegan de afuera y no actualizaste desde el 23 de octubre, está expuesto a una ejecución remota de código. El fallo se llama CVE-2026-111497, afecta al decodificador de Brotli que viene dentro de Node.js, Bun, Envoy e Istio, y ya tiene parches.

Lo encontraron agentes de seguridad de OpenAI mientras buscaban debilidades en el entorno donde la empresa entrena sus modelos. Según OpenAI, un atacante puede tomar el control de un servidor sin parche enviándole datos comprimidos maliciosos, sin necesidad de una cuenta. Y funciona al revés: un cliente sin parche que acepta respuestas comprimidas puede ser atacado por un servidor malicioso.

Qué falla exactamente

El aviso de seguridad de Node.js lo describe como una escritura fuera de límites, de severidad alta. Ante cierto dato mal formado, el decodificador lo trataba como «falta más entrada» en lugar de como un error, y seguía agregando bytes a un búfer interno de ocho bytes. Con eso se puede corromper la memoria del proceso: provocar una caída, filtrar memoria o ejecutar código.

La causa de fondo se corrigió en el código de Brotli en febrero, pero en ese momento nadie sabía que era un problema de seguridad y no hubo una versión nueva. Por eso el parche tiene que bajar en cascada: primero Brotli, después cada programa que lo incluye y, al final, cada persona que usa esos programas.

Las versiones que lo corrigen

La lista de Patch the Planet, revisada el 23 de octubre:

  • Node.js: 22.23.4, 24.22.1 y 26.12.1, o posteriores de la misma línea.
  • Bun: 1.4.4, que incluye Brotli 1.2.1.
  • Envoy: 1.40.0, 1.39.3, 1.38.6 y 1.37.8.
  • Istio: 1.29.9, 1.30.6 y 1.31.2. La 1.29 ya no tiene soporte.
  • Brotli original de Google: 1.0.10, 1.1.1 y 1.2.1, según la rama que uses.

Antes de dar acceso

Un correo por semana con lo que pruebo sobre acceso, cuentas y agentes, y la tabla de costo de lista medida (USD de lista, no lo facturado). No es una lista de verificación descargable.

Si ves una verificación o un error de Buttondown, complétalo ahí.

Te suscribes al newsletter de Yoseph Franco (vía Buttondown). Puedes darte de baja cuando quieras.

Actualizar el paquete no alcanza si el proceso viejo sigue corriendo. Hay que reiniciar o volver a desplegar cada servicio, worker, tarea programada y réplica, y reconstruir las imágenes de contenedores que traen el runtime adentro.

Dónde más puede estar escondido

Brotli no vive solo en el servidor web. Antes de dar el tema por cerrado, revisa estos lugares:

  • Apps de escritorio basadas en Electron. Pueden traer dos copias de Brotli, la de Chromium y la de Node.js. Que el navegador esté parcheado no prueba que el Node.js interno también lo esté.
  • Clientes y librerías nativas. curl y libcurl, los bindings de Python y Java, y los binarios estáticos o paquetes precompilados pueden necesitar su propia actualización.
  • Lectores de archivos. Algunos decodificadores de fuentes tipográficas y de archivos de datos usan Brotli. La exposición no se limita al tráfico HTTP.

Un dato que tranquiliza: usar Brotli solo para comprimir lo que envías no te expone a este fallo. El riesgo está en descomprimir datos que no controlas.

Si no puedes actualizar hoy

Desactiva la descompresión de Brotli para datos no confiables y deja activos gzip y los demás formatos:

  • En los servidores, rechaza los cuerpos de solicitud comprimidos en Brotli antes de que los descomprima un proxy, un middleware o el parser.
  • En los clientes HTTP, desactiva la descompresión automática de Brotli o rechaza esas respuestas antes de decodificarlas.
  • En Envoy e Istio, desactiva solo el filtro descompresor de Brotli, en las dos direcciones, sin borrar los de gzip o zstd.

Una trampa común: apagar la compresión Brotli en tu CDN o en tu servidor web no desactiva la descompresión de las solicitudes ni la de los clientes. Y los límites de tamaño o las reglas del firewall de aplicaciones no cubren todos los caminos.

La comprobación final

Para cada servicio, alguien debería poder decir qué versión corre ahora mismo, no la que figura en el archivo de dependencias. Compara el binario o la imagen en ejecución contra la lista de arriba. Si dejaste un bloqueo temporal, prueba que rechaza Brotli y que gzip sigue funcionando.

Las versiones corregidas y las mitigaciones vienen de Patch the Planet, una iniciativa de OpenAI. La descripción técnica, del aviso de seguridad de Node.js de octubre de 2026. El registro oficial es CVE-2026-111497 y el contexto del hallazgo está en el post de OpenAI. Todo consultado el 23 de octubre de 2026.

Antes de dar acceso

Un correo por semana con lo que pruebo sobre acceso, cuentas y agentes, y la tabla de costo de lista medida (USD de lista, no lo facturado). No es una lista de verificación descargable.

Si ves una verificación o un error de Buttondown, complétalo ahí.

Te suscribes al newsletter de Yoseph Franco (vía Buttondown). Puedes darte de baja cuando quieras.