Un fallo de corrupción de memoria en el decodificador de Brotli de Google ha desencadenado actualizaciones en entornos de ejecución de lenguajes, proxies y paquetes de Python, mientras los investigadores demuestran la ejecución de código en una compilación sin parchear de Node.js.
Catalogada como CVE-2026-111497, la vulnerabilidad resulta alcanzable cuando un software descomprime datos Brotli controlados por un atacante. Un flujo manipulado puede provocar una escritura fuera de los límites, lo que potencialmente expone memoria, bloquea la aplicación o permite la ejecución arbitraria de código. No se ha informado de ninguna explotación en entornos reales.
Según The Hacker News, la divulgación comenzó el 21 de octubre de 2026, cuando Google y Node.js publicaron las correcciones. Otros proyectos han seguido con actualizaciones de sus propias copias del decodificador.
Tanto las solicitudes entrantes como las respuestas obtenidas pueden exponer las aplicaciones
Brotli comprime páginas web y otro tráfico. La vulnerabilidad está en su decodificador en C, concretamente en el tratamiento del cambio de tipo de bloque en c/dec/decode.c, según la evaluación de Red Hat sobre CVE-2026-111497. La explotación requiere un flujo malformado; la salida normal y bien formada del codificador no activa la ruta vulnerable.
En Node.js y Bun, la exposición incluye las llamadas integradas fetch() que reciben respuestas Content-Encoding: br. Las subidas entrantes también pueden llegar al decodificador a través del manejo del cuerpo de las solicitudes, como ocurre en Express 5 y body-parser 2. Un servidor HTTP básico de Node.js no descomprime automáticamente los cuerpos de las solicitudes.
Las aplicaciones de Python pueden quedar expuestas por el mero hecho de tener instalado el paquete Brotli o brotlicffi: los clientes HTTP como requests, urllib3, httpx y aiohttp decodifican entonces automáticamente las respuestas Brotli. La aplicación no necesita importar directamente ninguno de esos paquetes de compresión.
Envoy e Istio requieren que la descompresión Brotli esté habilitada. Los despliegues en los que está deshabilitada no exponen esta ruta del decodificador.
El Red Team de Imperva, que denomina Node2Shell a su investigación, demostró la ejecución de código controlada por un atacante en una compilación sin modificar de Node.js 24.22.0 que se ejecutaba en Linux sobre ARM64. Entregó datos maliciosos tanto mediante una respuesta obtenida como mediante el cuerpo de una solicitud de Express. El exploit requirió varios intentos, no se ha publicado y no se probó en otras compilaciones. Esa demostración no establece que la ejecución de código funcione contra todos los productos afectados.
Red Hat afirma que no existe una prueba de concepto pública y fiable de ejecución remota de código. Califica el problema como Important, con una puntuación CVSS 3.1 de 8,1, y cita los requisitos de explotación y el endurecimiento de la plataforma, que dificultan la ejecución fiable de código sin eliminar otros impactos. Envoy lo califica como Critical, con 9,2 según CVSS 4.0, mientras que Node.js lo clasifica como High.
Las versiones corregidas dependen del producto y del despliegue
Las correcciones indicadas para la biblioteca C de Brotli de Google son 1.0.10, 1.1.1 y 1.2.1. Las aplicaciones que incluyen la biblioteca en su propio paquete necesitan sus propias actualizaciones; instalar una biblioteca corregida del sistema no sustituye necesariamente un decodificador incluido.
Para el resto de software afectado, las versiones corregidas indicadas son:
- Node.js: 22.23.4, 24.22.1 y 26.12.1, para las ramas de publicación 22.x, 24.x y 26.x correspondientes. El informe también identifica como afectadas las versiones 20.x y anteriores de Node.js, que han llegado al final de su vida útil.
- Bun: 1.4.4; las versiones 1.4.3 y anteriores están afectadas.
- Istio: 1.31.2, 1.30.6 y 1.29.9, que corrigen los rangos afectados 1.31.0–1.31.1, 1.30.0–1.30.5 y 1.29.0–1.29.8 cuando la descompresión Brotli está habilitada.
- Python Brotli: 1.2.1; las versiones 1.2.0 y anteriores están afectadas.
- Python brotlicffi: 1.2.1.0; las versiones 1.2.0.x y anteriores están afectadas.
El aviso de Envoy del 23 de octubre identifica como afectadas las versiones v1.39.2, v1.38.5, v1.37.7 y v1.36.11 en todas las plataformas. Enumera las correcciones en v1.40.0, v1.39.3, v1.38.6, v1.37.8 y v1.36.12. El aviso limita el impacto a los despliegues con el descompresor Brotli configurado y señala que un atacante remoto y no autenticado podría corromper el estado del decodificador, divulgar memoria, provocar una denegación de servicio o, potencialmente, ejecutar código.
La exposición de cdxgen incluye los análisis de repositorios y el modo servidor
El aviso de cdxgen del 22 de octubre abarca los binarios independientes publicados y las imágenes de contenedor que incluyen entornos de ejecución vulnerables. Los rangos de versiones afectados son 13.4.0 y anteriores para @cdxgen/cdxgen, y 12.8.8 y anteriores para @cyclonedx/cdxgen; las versiones parcheadas son 13.5.0 y 12.8.9, respectivamente.
El alcance incluye todas las familias de ejecutables independientes, slim y full, en todas las plataformas. Las instalaciones realizadas mediante npm, pnpm o npx utilizan en su lugar el Node.js del host y requieren un entorno de ejecución del host parcheado.
Con la configuración predeterminada, analizar un repositorio no confiable puede activar el fallo cuando su Podfile.lock apunta a una fuente externa :git. cdxgen obtiene el podspec de ese host y descomprime una respuesta Brotli aunque no la haya solicitado. El modo seguro sigue permitiendo cualquier host HTTPS. Otras rutas implican registros de npm, Deno o Dart proporcionados por el proyecto con FETCH_LICENSE, y sondeos de registros OCI con --bom-audit.
En modo --server, el endpoint /sbom descomprime los cuerpos de las solicitudes Brotli antes de la validación o la autenticación.
Ambas versiones parcheadas de cdxgen incluyen Node.js 24.22.1. La versión 12.8.8 estaba previsto que incluyera la actualización de seguridad, pero sus binarios independientes conservaban Node.js 24.18.0 y sus imágenes de contenedor no se publicaron. El aviso dirige a los usuarios a la 12.8.9 o posterior. Las compilaciones actualizadas también trasladan cdxgen-secure a la imagen de versión correspondiente, usan la compilación oficial de Node.js 24.22.1 para cdxgen-ppc64 y usan Bun 1.4.4 para cdxgen-bun.
Las mitigaciones deben cubrir los datos antes de la descompresión
Cuando no pueden aplicarse las actualizaciones de inmediato, las mitigaciones documentadas se centran en impedir que los datos Brotli no confiables lleguen al decodificador. Entre ellas figuran rechazar las solicitudes entrantes con Content-Encoding: br antes de la descompresión, desactivar la decodificación automática de respuestas Brotli donde esté soportada o eliminar los paquetes Brotli y brotlicffi de Python para que los clientes recurran a gzip y deflate.
Quitar br de Accept-Encoding por sí solo no basta: un servidor puede seguir devolviendo contenido comprimido con Brotli. La protección de cortafuegos también tiene límites. Vercel afirmó que sus reglas aplicadas el día de la divulgación no cubrían las respuestas que las funciones obtienen de otros servidores. El informe indica que no se ha publicado ninguna solución alternativa para Node.js, por lo que la actualización del entorno de ejecución es la corrección prescrita.
Para cdxgen, los responsables del mantenimiento recomiendan además restringir los destinos con CDXGEN_ALLOWED_HOSTS, establecer COCOA_FULL_SCAN=false para omitir las descargas remotas de podspec y mantener el modo servidor inaccesible para clientes no confiables. Otra opción documentada es un host con Node.js parcheado junto con el paquete npm.
Tras la actualización, hay que reiniciar los servicios y reconstruir las imágenes de contenedor para reemplazar el decodificador en los procesos en ejecución. Los escáneres de dependencias de Python pueden tardar en actualizarse: el informe señala que el aviso de GitHub carecía de entradas de paquetes afectados, mientras que PYSEC-2026-4322 y PYSEC-2026-4323 se añadieron el 23 de octubre. Por tanto, conviene revisar manualmente las versiones instaladas.
La propia corrección es anterior a la divulgación. OpenAI, cuyo equipo de Codex Security informó de la vulnerabilidad, afirmó que el cambio subyacente entró en el código fuente de Brotli el 27 de febrero sin que se reconociera como una corrección de seguridad. Ninguna versión de Brotli lo incluyó hasta el 21 de octubre.




