Seguridad y privacidad

Grave fallo en el decodificador Brotli permite la ejecución remota de código en Node.js, Bun y Python

Un error de corrupción de memoria en la biblioteca C de Brotli de Google, identificado como CVE-2026-111497, permite la ejecución remota de código en múltiples entornos de ejecución, incluidos Node.js y Bun.

Ilustración de una vulnerabilidad de compresión de datos que filtra memoria
Ilustración generada para este artículo

Traducido automáticamente del original en inglés.

Una vulnerabilidad crítica de corrupción de memoria en la biblioteca de compresión Brotli de Google ha expuesto a pilas de software ampliamente utilizadas a posibles ejecuciones remotas de código. Divulgada el 21 de octubre de 2026, esta falla afecta a Node.js, paquetes de Python y proxies de infraestructura como Envoy e Istio. Aunque no se han reportado ataques activos, los investigadores han demostrado con éxito la ejecución de código en compilaciones de Node.js sin parchear.

Qué ocurrió

La vulnerabilidad, registrada como CVE-2026-111497, reside en el código C responsable de decodificar datos comprimidos con Brotli. Dado que muchas aplicaciones y entornos de ejecución incluyen su propia copia de este decodificador, el error se propaga de forma independiente entre diferentes ecosistemas. Google asignó una calificación de severidad crítica de 9.2 en la escala CVSS 4.0, mientras que Node.js la clasificó como alta y Red Hat como importante. La causa raíz fue corregida en el código fuente de Brotli el 27 de febrero, pero permaneció sin publicar hasta el 21 de octubre porque los desarrolladores no reconocieron inicialmente que se trataba de una vulnerabilidad de seguridad.

El equipo Red Team de Imperva demostró que un atacante podría ejecutar código arbitrario en una compilación sin modificaciones de Node.js 24.22.0 que se ejecuta en Linux ARM64. Lograron esto enviando datos comprimidos manipulados a través de una respuesta obtenida mediante fetch o del cuerpo de una solicitud Express. Aunque este exploit requirió varios intentos y no ha sido publicado públicamente, confirma que el riesgo teórico es práctico. El equipo de Seguridad Codex de OpenAI, que reportó la falla, señaló que el problema funciona en ambas direcciones: los clientes maliciosos pueden comprometer servidores y los servidores maliciosos pueden comprometer clientes.

Cómo funciona

Brotli es un algoritmo de compresión desarrollado por Google para reducir el tamaño del tráfico web. La vulnerabilidad es un defecto de lectura y escritura fuera de límites (buffer over-read and overwrite) en el decodificador. Cuando un programa procesa datos de Brotli especialmente manipulados, el decodificador escribe más allá del final del búfer de memoria asignado. Esta corrupción de memoria puede provocar fallos, filtraciones de datos o la ejecución de instrucciones controladas por el atacante. Dado que el error existe en la biblioteca C subyacente, cualquier software que enlace o incluya versiones vulnerables del código Brotli de Google hereda el riesgo.

La exposición depende de si el software decodifica activamente flujos de Brotli no confiables. En Node.js y Bun, esto ocurre al usar la API integrada fetch() para recuperar respuestas con Content-Encoding: br, o cuando middleware como Express 5 y body-parser 2 descomprimen cuerpos de solicitud. En Python, el riesgo es más amplio; si los paquetes Brotli o brotlicffi están instalados, clientes HTTP como requests, urllib3 y httpx pueden decodificar automáticamente respuestas Brotli sin intervención explícita del desarrollador. Herramientas de infraestructura como Envoy e Istio solo son vulnerables si la descompresión Brotli está habilitada explícitamente en su configuración.

Detalles clave

  • Identificador CVE: CVE-2026-111497.
  • Versiones de Node.js afectadas: 22.x, 24.x y 26.x antes de las correcciones; 20.x y anteriores tienen fin de vida útil.
  • Versiones de Node.js corregidas: 22.23.4, 24.22.1 y 26.12.1.
  • Versiones de Bun afectadas: 1.4.3 y anteriores; corregido en 1.4.4.
  • Paquetes de Python afectados: Brotli 1.2.0 y anterior, brotlicffi 1.2.0.x y anterior; corregidos en 1.2.1 y 1.2.1.0 respectivamente.
  • Infraestructura: Envoy e Istio están afectados solo si la descompresión Brotli está configurada y habilitada.

Por qué importa

Para los equipos de ingeniería, esta vulnerabilidad destaca los riesgos ocultos de las dependencias transitivas y las bibliotecas C empaquetadas. A diferencia de las típicas vulnerabilidades de paquetes JavaScript, este defecto vive en el propio entorno de ejecución. Actualizar una dependencia en package.json es insuficiente si el entorno de ejecución subyacente de Node.js o Bun permanece sin parchear. Además, los desarrolladores de Python pueden ser vulnerables incluso si nunca importan directamente una biblioteca Brotli, ya que los clientes HTTP comunes la incorporan automáticamente. Esto crea una superficie de ataque silenciosa que los escáneres de dependencias estándar podrían pasar por alto si no inspeccionan enlaces C a nivel de sistema o transitivos.

La publicación retrasada de la corrección también subraya una brecha en el mantenimiento de código abierto. El cambio de código existió durante meses sin un lanzamiento, dejando sistemas expuestos a pesar de que el parche estaba escrito. Este escenario complica la respuesta a incidentes, ya que los equipos no pueden depender únicamente de alertas automatizadas de registros de paquetes. Ahora es necesaria la verificación manual de versiones de tiempo de ejecución e imágenes de contenedores, especialmente para servicios que manejan datos externos o actúan como clientes de otros servidores.

Qué puedes hacer

  • Actualiza Node.js a 22.23.4, 24.22.1 o 26.12.1, y Bun a 1.4.4 o posterior.
  • Actualiza Brotli de Python a 1.2.1 y brotlicffi a 1.2.1.0, o desinstálalos si no son estrictamente necesarios.
  • Reinicia todos los servicios y reconstruye las imágenes de contenedor después de actualizar, ya que los procesos en ejecución retienen la antigua biblioteca vulnerable en memoria.
  • Si las actualizaciones inmediatas no son posibles, configura los proxies para rechazar solicitudes con Content-Encoding: br antes de que lleguen a la aplicación.
  • Deshabilita la decodificación automática de Brotli en los clientes HTTP y elimina br de las cabeceras Accept-Encoding donde sea factible, aunque ten en cuenta que los servidores aún pueden enviar contenido Brotli.
  • Verifica manualmente las versiones instaladas de los paquetes de Python, ya que los escáneres de dependencias como Dependabot pueden no haber marcado todavía los paquetes específicos de PyPI asociados con este CVE.
  • #security
  • #nodejs
  • #python
  • #vulnerability
  • #brotli

Herramientas de la Tienda de Bytechap

Seguir leyendo

Todos los artículos