Fallo crítico en el decodificador Brotli (CVSS 9.2) amenaza a Node.js, Python y curl

Una vulnerabilidad crítica en la popular biblioteca de compresión Brotli de Google, registrada como CVE-2026-111497, puede permitir a un atacante bloquear o potencialmente ejecutar código en servidores y clientes que procesan tráfico HTTP comprimido con Brotli. El fallo, revelado por primera vez por el proyecto Node.js el 21 de octubre y confirmado como mucho más extendido el 23 de octubre, tiene una puntuación CVSS v4.0 de 9.2, calificada como crítica.
Brotli es el formato de compresión detrás de la codificación de contenido br, usada en toda la web moderna para reducir el tamaño de las respuestas y solicitudes HTTP. Como viene integrada o enlazada estáticamente en una enorme cantidad de software, un fallo en el decodificador no se queda limitado a un solo proyecto. La firma de seguridad Aikido, que siguió la propagación del problema por distintos ecosistemas de lenguajes, descubrió que afecta a la biblioteca C original de Brotli (versiones 1.0.3 a 1.2.0), a los paquetes brotli y brotlicffi de PyPI, a la copia incluida en Node.js, y a consumidores posteriores como los clientes HTTP de Python urllib3, requests, httpx, aiohttp y Scrapy, además de Bun, Envoy, Istio y compilaciones de curl y libcurl que enlazan Brotli de forma estática. Según el análisis de Aikido, Apache y Nginx no se ven afectados por defecto.
El fallo es una escritura fuera de límites de memoria (CWE-787) en el decodificador, activada por un flujo de datos Brotli malformado. Como la descompresión ocurre automáticamente siempre que un cliente o servidor anuncia soporte para la codificación br, el ataque funciona en ambas direcciones: un cliente malicioso puede atacar a un servidor que decodifica cuerpos de solicitud, y un servidor malicioso puede atacar a un cliente que acepta respuestas comprimidas, sin necesidad de autenticación alguna. Aikido indica que los impactos confirmados van desde fugas de memoria y bloqueos hasta ejecución arbitraria de código, aunque hasta el 22 de octubre no se había observado explotación real de la variante en Node.js.
Resulta llamativo que, según se informa, el fallo de seguridad de memoria subyacente fue encontrado y corregido silenciosamente en el código fuente de Brotli en febrero, por ingenieros de OpenAI, sin que en ese momento nadie lo marcara como un problema de seguridad; es decir, la ventana vulnerable existió durante unos ocho meses antes de que esta divulgación conectara todas las piezas.
Ya hay parches disponibles para algunos proyectos afectados, aunque no para todos: Node.js 22.23.4, 24.22.1 y 26.12.1; Brotli 1.2.1 (con retroportados a 1.0.10 y 1.1.1 en ramas más antiguas); brotlicffi 1.2.1.0; Bun 1.4.4; Envoy 1.40.0, 1.39.3, 1.38.6 y 1.37.8; e Istio 1.29.9, 1.30.6 y 1.31.2. Aikido advierte que, a 23 de octubre, los escáneres de vulnerabilidades estándar como pip-audit, Dependabot y Safety aún no señalaban las versiones afectadas de los paquetes de PyPI, por lo que los equipos que dependen únicamente del escaneo automático de dependencias podrían no recibir ninguna alerta. Dado que solo el paquete de Brotli en PyPI registra unas 82.8 millones de descargas al mes, el alcance práctico de las instalaciones sin parchear es probablemente considerable.
Para los equipos que no puedan parchear de inmediato, Aikido recomienda desinstalar Brotli o brotlicffi donde sean dependencias opcionales, y configurar los servidores para rechazar solicitudes con Content-Encoding: br. La firma advierte que simplemente eliminar br de la cabecera Accept-Encoding saliente no es suficiente por sí solo, ya que un decodificador todavía vulnerable puede activarse si cualquiera de las partes decide enviar una carga comprimida con Brotli, independientemente de lo que se haya solicitado.
Publicado originalmente por Aikido Security. Lee el artículo original para más detalles.
Ver fuente original