Vulnerabilidad crítica en el decodificador Brotli que afecta a Node.JS, Bun, navegadores, clientes HTTP y otros proyectos

Se ha detectado una vulnerabilidad en la biblioteca de referencia del decodificador del formato de compresión de datos Brotli (CVE-2026-111497, nombres en clave Broccoli2Shell y HTTP2Shell), que conduce a un desbordamiento de búfer al procesar datos comprimidos especialmente formateados. Según Google, la vulnerabilidad puede ser utilizada para la ejecución remota de código en proyectos que utilizan la implementación oficial del decodificador Brotli. Entre los proyectos afectados por esta vulnerabilidad se encuentran: Node.js, Bun, Envoy, Istio, navegadores web, servidores proxy, clientes HTTP, servidores HTTP, compresores, servidores proxy, firmware UEFI, visores JPEG XL, bibliotecas de contenido de Python, Ruby, Java, PHP y .NET y sus dependencias relacionadas.

El problema fue identificado por OpenAI en febrero de este año y se bloqueó en la base de código de Brotli mediante el descarte de flujos incorrectos durante la decodificación. El 22 de octubre se publicaron versiones corregidas de Brotli 1.0.10, 1.1.1 y 1.2.1 en las que se anunció claramente la eliminación de la vulnerabilidad y se corrigió el problema en cuestión. El mismo día se creó un prototipo de exploit que permitió la ejecución remota de código en condiciones de laboratorio, utilizando compilaciones no estándar (en las compilaciones estándar se producía un fallo). Más tarde, la empresa Imperva registró un ataque a compilaciones estándar de Node.js 24.22.0 en un entorno Linux en un sistema ARM64.

La vulnerabilidad conduce a una escritura fuera del búfer debido al manejo incorrecto de errores durante el análisis de bloques en el flujo comprimido. La función DecodeBlockTypeAndLength() devolvía solo valores true y false en lugar del código de error, lo que impedía que el código llamador diferenciara entre una corrupción del flujo y un estado que requería pasar datos adicionales a la función. En caso de que se indique un tipo de bloque de datos comprimidos incorrecto en el flujo, el decodificador lo interpretaba no como un error, sino como un estado de falta de datos que requería una lectura adicional del flujo. Pero dado que el búfer asignado no estaba diseñado para datos leídos adicionalmente, se escribían en un área fuera de sus límites, donde se almacenaba el estado interno del decodificador.

Proyectos vulnerables:

  • La biblioteca de referencia de Brotli, el problema se manifiesta desde la versión 1.0.3 y ha sido corregido en las actualizaciones 1.0.10, 1.1.1 y 1.2.1. La vulnerabilidad afecta a aplicaciones y bibliotecas que utilizan la biblioteca libbrotlidec.
  • La plataforma JavaScript Node.js ha solucionado el problema en las versiones 26.12.1, 24.22.1 y 22.23.4. Las aplicaciones que utilizan el método fetch() para solicitar contenido externo pueden verse afectadas, ya que decodifica automáticamente las respuestas HTTP con el encabezado "Content-Encoding: br". La vulnerabilidad también se manifiesta al invocar directamente los métodos zlib.brotliDecompress*(), createBrotliDecompress() y brotli.decompress() para desempaquetar contenido de terceros o al recibir solicitudes HTTP analizadas por las bibliotecas Express 5 y body-parser 2.x.
  • Los paquetes de Python brotli y brotlicffi (la corrección se propondrá en la versión 1.2.1) y los proyectos que los utilizan, como las bibliotecas populares urllib3, aiohttp, httpx y Scrapy, que decodifican respuestas con el encabezado "Content-Encoding: br" al acceder a recursos web externos.
  • Servidores HTTP, proxies HTTP, clientes HTTP y navegadores web que admiten la compresión Brotli ("Accept-Encoding: br"). En Apache httpd se incluye mod_brotli (desactivado por defecto). Para nginx, hay un módulo externo ngx_brotli (la versión de brotli en las dependencias se ha actualizado a la actual). En Chrome/Chromium y Firefox, el problema ya se ha solucionado en una de las actualizaciones anteriores. En el proxy-servidor Envoy, la vulnerabilidad se ha corregido en las versiones 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
  • .NET runtime al utilizar los métodos BrotliDecoder, BrotliStream e HttpClient en la aplicación. La vulnerabilidad aún no se ha solucionado.
  • La extensión PHP brotli al utilizar la función brotli_uncompress(). La corrección está en preparación.
  • El paquete Ruby brotli al utilizar el método Brotli.inflate. La vulnerabilidad aún no se ha solucionado.
  • Base de datos DuckDB al importar archivos Parquet comprimidos. La corrección está en preparación.
  • Base de datos ClickHouse. La corrección está en preparación.
  • Base de datos YDB. La vulnerabilidad aún no se ha solucionado.
  • Apache Arrow al importar archivos Parquet comprimidos. La corrección está en preparación.
  • libjxl (al comprimir metadatos en JPEG XL se utiliza Brotli).
    La corrección está en preparación.
  • Los compresores NanaZip, 7-Zip-zstd y p7zip al descomprimir archivos br. La vulnerabilidad no se ha solucionado.
  • MuPDF. La vulnerabilidad no se ha solucionado.
  • Firmware UEFI basado en EDK II y UEFITool, comprimido con Brotli. La corrección está en preparación — EDK II y UEFITool.
  • La plataforma JavaScript Bun. La vulnerabilidad se ha solucionado en la versión 1.4.4.
  • Plataforma de gestión de microservicios Istio. La vulnerabilidad se ha solucionado en las versiones 1.29.9, 1.30.6 y 1.31.2.
  • curl y libcurl, la vulnerabilidad se manifiesta si la dependencia incluye una versión vulnerable de libbrotlidec.
  • Analizadores del formato de fuentes Web Open Font (WOFF), en el que se utiliza
    Brotli.
  • Brotli4j, SumatraPDF, Ghostscript, CatBoost y YTsaurus. La vulnerabilidad fue corregida en una de las actualizaciones.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster