Guías de seguridad

Vulnerabilidad de Brotli CVE-2026-111497 (Node2Shell): cómo comprobar Node.js, Python y .NET, y qué actualizar

CVE-2026-111497 es una escritura fuera de límites en el decodificador de Brotli: datos comprimidos manipulados pueden corromper la memoria. Afecta a Brotli 1.0.3–1.0.9, 1.1.0 y 1.2.0, incluido en Node.js, Bun, los paquetes Brotli de Python, .NET y más. Cómo comprobarlo y versiones corregidas.

Publicado 2026-10-27 Actualizado 2026-10-27 Última verificación 2026-10-27 14 min de lectura
En esta página

Para quién es esto: desarrolladores y operadores que ejecutan servicios web, API, rastreadores o tareas por lotes con Node.js, Bun, Python o .NET. Este artículo se basa en información pública del proyecto Brotli de Google, Node.js, Microsoft, PyPI, JPCERT/CC y fuentes del Gobierno de EE. UU. No trata pasos de ataque ni código de exploit.

En desarrollo: esta página se actualizará conforme se publique más información

A las 23:00 UTC del 26 de octubre de 2026

Aún no se sabe

  • Si se está explotando (ninguna fuente primaria lo informa)
  • La evaluación propia de NVD (pendiente de análisis)
  • La lista completa de productos afectados
  • Algunas distribuciones Linux (versiones antiguas aún sin evaluar)

Google publicó las correcciones el 21 de octubre (hora de EE. UU.), Node.js el mismo día y Microsoft el 25 de octubre (hora de EE. UU.). JPCERT/CC emitió una alerta el 26 de octubre. El catálogo KEV de CISA no incluye el fallo. Más proveedores siguen publicando correcciones, así que esta página se actualizará a medida que lo hagan.

Qué hacer hoy

1

Compruebe si descomprime datos Brotli del exterior

Por ejemplo, un servidor web que descomprime peticiones enviadas con Content-Encoding: br, un cliente HTTP que descomprime automáticamente respuestas de sitios externos y código que descomprime archivos subidos por los usuarios. Si se da alguno de estos casos, trátelo como urgente (opinión de este sitio).

2

Compruebe las versiones de sus runtimes y paquetes

Use los comandos de «Cómo comprobar si está afectado», más abajo, para comprobar Node.js, Bun, los paquetes de Python y el runtime y el SDK de .NET.

3

Actualice a una versión corregida

Actualice como mínimo a las versiones de «Versiones corregidas», más abajo. Las compilaciones oficiales de nodejs.org de Node.js 20.x y anteriores están fuera de soporte y no reciben corrección, así que pase a 22.x o posterior. Para Node.js instalado desde paquetes de Ubuntu o Debian, siga el aviso de seguridad de la distribución.

4

Reconstruya, vuelva a desplegar y reinicie

Reconstruya con las versiones corregidas las imágenes de contenedor, los ejecutables creados con bun build --compile y las aplicaciones .NET autocontenidas o NativeAOT, y vuelva a desplegarlos. Reinicie también los procesos en ejecución: un proceso antiguo mantiene cargada la biblioteca antigua.

5

Busque indicios de compromiso

JPCERT/CC pide a los usuarios que, además de aplicar las correcciones, comprueben si ha habido un compromiso. Busque un aumento de caídas, procesos hijo desconocidos o conexiones salientes en los procesos que descomprimen datos del exterior (sugerencia de este sitio).

6

Corrija las versiones fijadas en archivos de bloqueo e imágenes base

Si package-lock.json, requirements.txt, poetry.lock o la línea FROM de un Dockerfile fija una versión antigua, la siguiente compilación la recuperará. Cambie las versiones fijadas a versiones corregidas.

Versiones corregidas

9,2
CVSS v4.0 (calificación de Google)
1.0.3–1.0.9, 1.1.0, 1.2.0
Versiones de Brotli afectadas
No incluida
KEV de CISA (mañana del 27 oct., hora de Japón)
Sin informes
Explotación (fuentes primarias)
Qué usaAfectadoCorregido enFuente
Brotli (biblioteca C)1.0.3–1.0.9, 1.1.0, 1.2.01.0.10, 1.1.1, 1.2.1Google
Node.js 22.xanterior a 22.23.422.23.4Node.js
Node.js 24.xanterior a 24.22.124.22.1Node.js
Node.js 26.xanterior a 26.12.126.12.1Node.js
Node.js 20.x y anteriores (compilaciones oficiales de nodejs.org)fin de soporteninguna (pase a 22.x o posterior)Node.js
Bunde 1.0.21 hasta antes de 1.4.41.4.4Bun
brotli de PyPIde 1.0.3 hasta antes de 1.2.11.2.1GitHub Advisory Database
brotlicffi de PyPIde 1.0.3 hasta antes de 1.2.1.01.2.1.0GitHub Advisory Database
.NET 8anterior a 8.0.33runtime 8.0.33 (SDK 8.0.133, 8.0.427)Microsoft
.NET 9anterior a 9.0.22runtime 9.0.22 (SDK 9.0.123, 9.0.320)Microsoft
.NET 10anterior a 10.0.14runtime 10.0.14 (SDK 10.0.114, 10.0.403)Microsoft
Envoyv1.39.2, v1.38.5, v1.37.7, v1.36.11v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12Envoy
Compilaciones de PHP para Windows8.5.12, 8.4.27, 8.3.36, 8.2.35 antes de la recompilación8.5.12-1, 8.4.27-1, 8.3.36-1, 8.2.35-1PHP

.NET Framework no está afectado (Microsoft). También hay corrección para las versiones preliminares de .NET 11 (11.0.0-rc.3.26522.148). Según Envoy, solo están afectados los despliegues que tienen configurado el descompresor de Brotli.

Las distribuciones Linux suelen aplicar la corrección mediante backport sin cambiar el número de versión original. Por ejemplo, brotli de Ubuntu 22.04 está corregido en «1.0.9-2ubuntu0.1», que sigue diciendo 1.0.9. Para los paquetes del sistema operativo, guíese por el aviso de seguridad de su distribución, no solo por el número de versión.

Según el equipo de PHP, las compilaciones de PHP para Windows están expuestas a través de la extensión cURL cuando está habilitada la descompresión automática de respuestas HTTP (está desactivada de forma predeterminada en cURL, pero las aplicaciones y las bibliotecas de cliente HTTP pueden activarla). Las compilaciones corregidas llevan el sufijo «-1»; la versión de PHP en sí no cambia.

Biblioteca del sistema operativo (libbrotli)

Se corrige con las actualizaciones del sistema. Reinicie los procesos que la usan

Incluida en un runtime (Node.js, Bun, .NET)

Actualice el propio runtime

Paquetes de lenguaje (brotli, brotlicffi)

Actualice en cada entorno virtual

Lo que usted compiló (contenedores, ejecutables)

Reconstruya con versiones corregidas y vuelva a desplegar

Cada lugar donde vive una copia de Brotli necesita su propia corrección. Una actualización del sistema operativo solo corrige la biblioteca del sistema.

Cómo comprobar si está afectado

Estos comandos solo comprueban versiones en sus propios sistemas.

1

Node.js

Ejecute node -v. Las versiones anteriores a 22.23.4, 24.22.1 o 26.12.1 están afectadas. node -p process.versions.brotli muestra la versión de Brotli incluida, pero según cómo se aplique la corrección ese número puede no cambiar, así que decida por la versión de Node.js en sí (opinión de este sitio). Para Docker, compruébelo dentro de la imagen, por ejemplo con docker run --rm --entrypoint node <image> -v. Node.js instalado desde paquetes de Ubuntu o Debian usa la libbrotli del sistema, así que compruébelo como se describe en «Bibliotecas del sistema operativo», más abajo.

2

Bun

Ejecute bun --version. Las versiones anteriores a 1.4.4 están afectadas. Los ejecutables creados con bun build --compile incluyen el Bun con el que se compilaron y siguen afectados hasta que se reconstruyan (aviso de Bun).

3

Python

Ejecute pip show brotli brotlicffi (o busque Brotli y brotlicffi en python -m pip list). Están afectados brotli anterior a 1.2.1 y brotlicffi anterior a 1.2.1.0. Si no está instalado ninguno de los dos, no hay ningún paquete de Python que corregir para este fallo. Cada entorno virtual y cada contenedor tiene su propia copia, así que compruebe cada uno. Si proviene de un paquete del sistema operativo como python3-brotli, guíese por el aviso de seguridad de su distribución, no por el número de versión.

4

.NET

Ejecute dotnet --list-runtimes y dotnet --list-sdks. Microsoft afirma que está expuesto si habilitó Brotli en la descompresión de peticiones de ASP.NET Core o en la descompresión automática de respuestas de HttpClient, o si llama directamente a BrotliStream o BrotliDecoder. Ninguna de las dos opciones automáticas está activada de forma predeterminada.

5

Bibliotecas del sistema operativo

Compruebe la versión instalada con dpkg -l 'libbrotli*' en Debian y Ubuntu, rpm -qa 'brotli*' 'libbrotli*' en sistemas basados en RHEL o apk list --installed 'brotli*' en Alpine, y compárela con el aviso de seguridad de su distribución. Debian corrigió Debian 12 en 1.0.9-2+deb12u1 (DLA-4855-1) y Debian 13 en 1.1.0-2+deb13u1 (DSA-6582-1).

Qué se ha divulgado

Escritura fuera de límites en el decodificador de Brotli (CVE-2026-111497)
CVE
CVE-2026-111497 (aviso de GitHub GHSA-9v8h-qqgm-4m35)
Tipo
Escritura fuera de límites (CWE-787) y valor de retorno no comprobado (CWE-252) en el decodificador de Brotli (c/dec/decode.c)
Gravedad
CVSS v4.0 9,2 (Google). Vector de ataque de red, sin autenticación, sin interacción del usuario, con requisitos de ataque (AT:P). Microsoft califica el problema de .NET con 8,1 según CVSS v3.1
Impacto
Descomprimir un flujo Brotli manipulado puede corromper la memoria adyacente, revelar contenido de la memoria, causar denegación de servicio o, potencialmente, permitir la ejecución de código arbitrario (descripción de Google en NVD). Para .NET, Microsoft afirma que podría provocar revelación de información, denegación de servicio o elevación de privilegios (no menciona ejecución de código)
Afectado
Brotli 1.0.3–1.0.9, 1.1.0 y 1.2.0, y los productos que lo incluyen
Corregido
Brotli 1.0.10, 1.1.1, 1.2.1 (21 de octubre de 2026, hora de EE. UU.)
Solución alternativa
Google no ofrece ninguna (JPCERT/CC). Microsoft indica que se evite descomprimir datos Brotli controlados por un atacante hasta poder actualizar

Según Node.js, el decodificador trataba un cambio de bloque no válido en datos malformados como una necesidad temporal de más entrada en lugar de como un error de formato, por lo que seguía escribiendo más allá del final de un búfer interno de ocho bytes. En Node.js están afectadas las aplicaciones que descomprimen con node:zlib datos Brotli proporcionados por un atacante. Node.js califica el problema como High (alto). Las mismas versiones corrigen otras nueve vulnerabilidades.

Según el aviso de Bun, fetch de Bun descomprime automáticamente las respuestas Brotli de forma predeterminada, así que el servidor al que se conecta una aplicación, o un atacante situado en la ruta de una conexión sin cifrar, puede suministrar los datos.

Una actualización del sistema operativo por sí sola puede no corregirlo

Brotli se incluye como copia dentro de muchos programas, como Node.js, Bun, los paquetes Brotli de Python, .NET y Envoy. JPCERT/CC pide a los usuarios cuyas aplicaciones descomprimen datos Brotli que consulten la información más reciente de cada proveedor sobre el impacto y el estado de las correcciones. Microsoft también afirma que actualizar el runtime compartido no corrige las aplicaciones NativeAOT; hay que volver a publicarlas.

Estado de la explotación y de la prueba de concepto

A la mañana del 27 de octubre (hora de Japón), Google, Node.js, Microsoft y JPCERT/CC no informan de explotación en la práctica. El catálogo KEV de CISA (versión del 26 de octubre) no incluye el fallo. La evaluación SSVC de CISA añadida a NVD el 23 de octubre califica la explotación como ninguna, la automatizabilidad como no y el impacto técnico como total. El CVSS de Microsoft califica la madurez del código de explotación como no probada.

Las fuentes primarias no mencionan una prueba de concepto pública. Un sitio explicativo independiente afirma que se publicó una el 22 de octubre: en compilaciones estándar solo provoca una caída y una lectura limitada de memoria, mientras que en una compilación debilitada deliberadamente llega a la ejecución de código. El mismo sitio afirma que el equipo de investigación de una empresa de seguridad logró ejecutar código en una imagen oficial de Node.js sin publicar el método. Este sitio no ha verificado nada de esto y no lo enlaza.

Ubuntu califica el problema con prioridad Medium (media), mientras que Google le asigna 9,2. Qué importa más en su caso depende de si descomprime datos recibidos del exterior (opinión de este sitio).

Sobre las principales bibliotecas HTTP de Python

A 27 de octubre, requests, urllib3, httpx y aiohttp no han publicado avisos sobre este fallo (este sitio revisó la lista de avisos de seguridad de cada repositorio). urllib3, httpx y aiohttp tratan brotli o brotlicffi como extras opcionales y solo descomprimen Brotli cuando uno de ellos está instalado. Los paquetes que hay que corregir son brotli y brotlicffi en el mismo entorno. Actualizar solo la biblioteca HTTP no sirve si brotli sigue siendo antiguo.

Lo que aún no se sabe

ElementoEstado
Explotación en la prácticaSin informes de fuentes primarias. No está en KEV
Prueba de concepto públicaNo mencionada por fuentes primarias. Un sitio independiente afirma que existe (sin verificar)
Evaluación de NVDPendiente de análisis (solo el 9,2 de Google)
Lista completa de productos afectadosSigue creciendo. Para navegadores y otros productos, consulte el aviso de cada proveedor
Distribuciones LinuxUbuntu 20.04 y anteriores aún sin evaluar

Fuentes

Todas consultadas el 27 de octubre de 2026.

  • JPCERT/CC, alerta sobre la escritura fuera de límites de Brotli (CVE-2026-111497) (JPCERT-AT-2026-0034, 26 de octubre de 2026, en japonés) — jpcert.or.jp
  • PHP, «Updated PHP Windows builds for Brotli security fix» (26 de octubre de 2026) — php.net
  • Versiones de Google Brotli v1.2.1, v1.1.1, v1.0.10 (21 de octubre de 2026) — v1.2.1 / v1.1.1 / v1.0.10
  • Node.js, «Node.js Security Releases» (21 de octubre de 2026) — nodejs.org
  • Microsoft, «Microsoft Security Advisory CVE-2026-111497 | .NET Brotli Decoder Out-of-bounds Write Vulnerability» (25 de octubre de 2026) — github.com/dotnet
  • GitHub Advisory Database GHSA-9v8h-qqgm-4m35 (brotli y brotlicffi de PyPI) — github.com
  • PyPI brotli 1.2.1 — pypi.org / brotlicffi 1.2.1.0 — pypi.org
  • Bun, «Bundled brotli decoder has an out-of-bounds write» (GHSA-663w-cv8g-jj2p, 23 de octubre de 2026) — github.com
  • Envoy, «Out-of-Bounds Write in Brotli Decompressor» (GHSA-3wvj-j6qm-62mr, 23 de octubre de 2026) — github.com
  • NVD, «CVE-2026-111497» — nvd.nist.gov
  • CISA, «Known Exploited Vulnerabilities Catalog» (no incluido en la versión del 26 de octubre) — cisa.gov
  • Ubuntu, «CVE-2026-111497» — ubuntu.com / Debian, «DLA-4855-1 brotli» — lists.debian.org

Historial de actualizaciones

2026-10-27: Primera versión, basada en información pública de Google, Node.js, Microsoft, Bun, Envoy, PHP, PyPI, JPCERT/CC, NVD, el catálogo KEV de CISA, Ubuntu y Debian.

Lectura recomendada

Última hora reciente

FAQ

Q¿Qué ha ocurrido?
A

El 21 de octubre de 2026 (hora de EE. UU.), Google publicó Brotli 1.2.1, 1.1.1 y 1.0.10 para corregir CVE-2026-111497, una escritura fuera de límites en la biblioteca oficial de Brotli. Descomprimir datos manipulados puede corromper la memoria y provocar caídas, revelación de memoria o, potencialmente, ejecución de código. Node.js, Bun, los paquetes Brotli de Python, .NET y otros han publicado correcciones para las copias que incluyen.

Q¿Qué son Node2Shell y HTTP2Shell?
A

Son apodos de esta vulnerabilidad. Según JPCERT/CC, se la llama Node2Shell en relación con la divulgación de Node.js, y HTTP2Shell porque Brotli se usa ampliamente para la compresión HTTP. Ambos se refieren a CVE-2026-111497, no a fallos distintos.

Q¿Estoy afectado?
A

Está afectado si un software que incluye Brotli 1.0.3–1.0.9, 1.1.0 o 1.2.0 descomprime datos Brotli recibidos del exterior. Eso significa Node.js anterior a 22.23.4, 24.22.1 o 26.12.1 en esas ramas, brotli de PyPI anterior a 1.2.1, brotlicffi anterior a 1.2.1.0 y .NET anterior a 8.0.33, 9.0.22 o 10.0.14. Microsoft afirma que ASP.NET Core y HttpClient no descomprimen Brotli automáticamente de forma predeterminada, así que la exposición de .NET depende de si usted lo habilitó.

QHe instalado las actualizaciones del sistema operativo. ¿Es suficiente?
A

No siempre. Las compilaciones oficiales de Node.js y las imágenes de Docker de nodejs.org, Bun, los wheels de Brotli para Python instalados desde PyPI, las aplicaciones .NET autocontenidas y NativeAOT, y los ejecutables de un solo archivo de Bun llevan su propio Brotli. Actualizar la libbrotli del sistema operativo no cambia esas copias. Actualice cada una y después reconstruya y vuelva a desplegar las imágenes de contenedor y los ejecutables. Node.js instalado como paquete de Ubuntu o Debian usa la libbrotli del sistema, así que una actualización del sistema operativo lo corrige (rastreadores de seguridad de Ubuntu y Debian).

Q¿Se está explotando?
A

A la mañana del 27 de octubre (hora de Japón), ninguna fuente primaria informa de explotación y el catálogo KEV de CISA no la incluye. La evaluación SSVC de CISA añadida a NVD el 23 de octubre califica la explotación como ninguna. Google, Node.js, JPCERT/CC y Microsoft no mencionan una prueba de concepto pública. Un sitio explicativo independiente afirma que se publicó una; este sitio no lo ha verificado.

Q¿Tengo que actualizar requests, urllib3, httpx o aiohttp?
A

A 27 de octubre, ninguna de estas bibliotecas ha publicado un aviso sobre este fallo. urllib3, httpx y aiohttp solo descomprimen Brotli cuando brotli o brotlicffi está instalado (requests usa urllib3). Lo que hay que corregir es brotli (1.2.1 o posterior) y brotlicffi (1.2.1.0 o posterior) en el mismo entorno. Compruébelo con pip show brotli brotlicffi.