Seguridad y privacidad

Grave fallo en el decodificador Brotli afecta a Node.js, Python y servicios HTTP

La CVE-2026-111497 permite la ejecución remota de código mediante flujos Brotli manipulados en los principales entornos de ejecución. Ya hay parches disponibles para Node.js, Python, Bun y Envoy.

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 en la biblioteca de compresión Google Brotli, identificada como CVE-2026-111497, expone a importantes entornos de ejecución de software a la ejecución remota de código. Divulgada el 23 de octubre de 2026, esta falla afecta a Node.js, Python, Bun y varios componentes de infraestructura como Envoy e Istio. Los desarrolladores deben aplicar parches a las bibliotecas afectadas o deshabilitar la decodificación Brotli de inmediato para evitar una posible compromisión del servidor.

Qué ocurrió

La vulnerabilidad, inicialmente denominada "Node2Shell" cuando fue divulgada por Node.js el 22 de octubre, resultó tener implicaciones más amplias en todo el ecosistema de software. Se origina en un error de seguridad de memoria en el decodificador Brotli que permite a un atacante no autenticado corromper la memoria del proceso. Al enviar un flujo de datos comprimido especialmente manipulado, un adversario puede provocar la caída de un servicio, filtrar información sensible o ejecutar código arbitrario. El Sistema Común de Puntuación de Vulnerabilidades (CVSS) v4.0 califica este problema con un 9.2, clasificándolo como crítico.

OpenAI reveló que descubrió la causa raíz en febrero de 2026. Aunque el error subyacente se corrigió en el código fuente de Brotli en ese momento, no se reconoció como una vulnerabilidad de seguridad, por lo que no se emitió ninguna versión parcheada hasta ahora. Este retraso significa que todos los proyectos que incluían su propia copia de la biblioteca Brotli permanecieron expuestos durante meses. A partir del 23 de octubre, se han lanzado parches para libbrotli, Python, C++, Node.js, Bun y Envoy, y se esperan más actualizaciones para otras aplicaciones dependientes.

Cómo funciona

Brotli es un algoritmo de compresión sin pérdidas ampliamente utilizado para reducir el tamaño del contenido web, como HTML, CSS y JavaScript, durante la transmisión HTTP. La vulnerabilidad reside en la función DecodeBlockTypeAndLength() dentro del decodificador. Esta función gestiona los cambios de bloque, que ocurren cuando un flujo de datos cambia el árbol de Huffman que utiliza para la descompresión. En las versiones vulnerables (1.0.3 a 1.2.0), la función devuelve un simple valor booleano que no distingue entre un flujo malformado y una solicitud de más datos de entrada.

Los llamadores en la ruta de decodificación rápida descartan este valor de retorno, lo que conduce a un estado en el que el decodificador continúa procesando incluso cuando debería detenerse. Un atacante puede explotar esto creando un flujo que agote la longitud de un bloque y fuerce un cambio inválido. El decodificador realiza entonces una escritura fuera de límites, desbordando un pequeño búfer de trabajo y dañando la memoria adyacente. La corrección introduce un código de error específico, BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH, garantizando que el decodificador se detenga inmediatamente al encontrar tales errores de formato.

Detalles clave

  • Versiones afectadas: Brotli 1.0.3 a 1.2.0 en todas las plataformas.
  • Versiones corregidas: Brotli 1.2.1, 1.1.1 y 1.0.10; brotlicffi 1.2.1.0.
  • Parches de entorno de ejecución: Node.js 22.23.4, 24.22.1, 26.12.1; Bun 1.4.4; Envoy 1.40.0, 1.39.3, 1.38.6, 1.37.8.
  • Impacto en Python: Los paquetes Brotli y brotlicffi son vulnerables si está instalada la versión 1.2.0 o anterior.
  • Brecha de detección: Las bases de datos de avisos aún no vinculan la CVE con los paquetes de PyPI, por lo que herramientas como Dependabot pueden no marcarla automáticamente.
  • Vector de ataque: Acceso remoto y no autenticado mediante solicitudes o respuestas HTTP manipuladas que contienen datos Brotli maliciosos.

Por qué importa

Esta vulnerabilidad destaca los riesgos asociados con las dependencias transitivas en las cadenas de suministro de software modernas. Muchos desarrolladores no importan explícitamente Brotli en su código, pero clientes HTTP populares como requests, httpx y urllib3 en Python, o el fetch integrado en Node.js, lo cargan automáticamente si está presente. Esto significa que una aplicación puede ser vulnerable sin ninguna referencia directa a la biblioteca en su código fuente. La naturaleza automática de estas dependencias dificulta evaluar la exposición sin una inspección profunda del árbol de dependencias.

Para los equipos que construyen servicios en red, el impacto es grave porque la superficie de ataque incluye tanto el tráfico entrante como el saliente. Un cliente malicioso puede atacar a un servidor enviando cuerpos de solicitud comprimidos, mientras que un servidor malicioso puede atacar a un cliente devolviendo respuestas comprimidas. Este modelo de amenaza bidireccional requiere parchear exhaustivamente todos los servicios que manejan tráfico HTTP, incluidos los microservicios internos y las APIs externas. El retraso en reconocer la implicación de seguridad de la corrección de febrero subraya aún más la necesidad de un monitoreo riguroso de los cambios en las bibliotecas ascendentes.

Qué puedes hacer

  • Actualiza los entornos de ejecución: Actualiza Node.js a 22.23.4, 24.22.1 o 26.12.1, y Bun a 1.4.4 o posterior.
  • Actualiza los paquetes de Python: Ejecuta pip install -U "Brotli>=1.2.1" y pip install -U "brotlicffi>=1.2.1.0" en todos los entornos.
  • Reconstruye contenedores: Regenera los archivos de bloqueo (lockfiles) y reconstruye las imágenes de contenedor para asegurar que las versiones parcheadas estén incluidas en los artefactos desplegados.
  • Deshabilita la decodificación: Si no es posible parchear inmediatamente, deshabilita la decodificación Brotli eliminando br de las cabeceras Accept-Encoding y rechazando las solicitudes entrantes con Content-Encoding: br a nivel de proxy.
  • Verifica las dependencias: Usa pipdeptree o herramientas similares para identificar qué bibliotecas arrastran Brotli como dependencia transitiva.
  • Monitorea los avisos: Consulta los boletines de seguridad específicos del proveedor para los paquetes del sistema operativo, ya que pueden incluir correcciones retroportadas (backports) sin cambiar el número de versión ascendente.
  • #security
  • #vulnerability
  • #nodejs
  • #python
  • #brotli

Herramientas de la Tienda de Bytechap

Seguir leyendo

Todos los artículos