Node2Shell: la falla crítica de Brotli que golpeó a Node.js, .NET y Python (2026)
Node2Shell (CVE-2026-111497): una falla crítica en la biblioteca Brotli de Google golpea a Node.js, .NET, Python y más. A quién afecta y cómo corregir.
Investigador de seguridad y fundador de No Vuln

Si tu aplicación corre en Node.js, .NET o cualquier servicio que descomprime datos Brotli que vienen de fuera, actualiza el runtime. El 21 de octubre de 2026 — en el mismo lote de correcciones que trajo php2shell a PHP — salió a la luz Node2Shell (CVE-2026-111497): una falla crítica en el descompresor Brotli de Google, la biblioteca que Node.js y mucho otro software incrustan. El detalle que la hace interesante no es un solo producto: una única biblioteca compartida obligó a corregir Node.js, .NET, PowerShell, Python, Bun y más, todo en la misma semana. Este artículo explica qué es la falla, quién está realmente expuesto, cómo funciona y el paso a paso para corregir.
Qué es Node2Shell
Es una falla en el descompresor Brotli — técnicamente, una escritura fuera de los límites (out-of-bounds write) causada por un retorno de error que no se verificaba. Brotli es el algoritmo de compresión que creó Google y que se usa en toda la web (es el Content-Encoding: br que tu navegador negocia con los servidores). El problema no está en HTTP ni en Node.js en sí: está en el código C del descompresor, que Node y decenas de otros proyectos compilan dentro. CISA, de hecho, catalogó la falla como “Google Brotli Unchecked Return Value Vulnerability”.
La gravedad es 9,2 de 10 en la escala CVSS 4.0 (calificación de Google). El impacto posible: datos Brotli cuidadosamente armados corrompen la memoria del descompresor y, a partir de ahí, pueden tumbar el proceso, filtrar trozos de memoria o — en el peor caso — llevar a ejecución remota de código. Las versiones afectadas de la biblioteca van de la 1.0.3 a la 1.2.0; la corrección está en las 1.0.10, 1.1.1 y 1.2.1. La falla fue descubierta por el equipo de seguridad de OpenAI.
Por qué esto no es solo Node.js
Aquí está el ángulo que vale la pena recordar: cuando la falla vive en una dependencia compartida, no respeta la frontera de un lenguaje. El mismo descompresor Brotli está incrustado en muchísimo software, y por eso la semana se volvió una carrera de parches en paralelo:
- Node.js — corregido en 22.23.4, 24.22.1 y 26.12.1;
- Microsoft — actualización fuera de ciclo el 25/10: .NET 8.0.33, 9.0.22 y 10.0.14 (más .NET 11 RC3), Visual Studio 2019/2022/2026 y PowerShell 7.4/7.5/7.6;
- Python — los paquetes
Brotli(1.2.1) ybrotlicffi(1.2.1.0) en PyPI; - Bun, Envoy e Istio también publicaron versiones corregidas.
Y aún hay proyectos que, según los rastreadores públicos (ellos mismos se declaran incompletos), seguían sin corrección cuando salió la noticia — DuckDB, Apache Arrow, variantes de 7-Zip y EDK II (firmware). No toda configuración de esos proyectos expone el código vulnerable, pero el mensaje es el mismo: busca Brotli en todo tu stack, no solo Node.
Quién está expuesto (y quién no)
La buena noticia: la exposición no es automática. Para que la falla se alcance, datos Brotli controlados por un atacante tienen que llegar al descompresor nativo. En las pruebas de Imperva, dos caminos típicos en Node.js llevan hasta ahí:
- Una respuesta que tu app consume: tu servicio hace una llamada de salida y descomprime una respuesta Brotli de otro servidor usando el
fetch()integrado de Node. Si ese “otro servidor” es hostil (o un SSRF hace que tu app hable con él), los datos llegan al decoder. - El cuerpo de la petición: aplicaciones en Express 5.0.0–5.3.0 o body-parser 2.0.0–2.3.0, con el manejo de Brotli configurado, descomprimen el cuerpo que envió el cliente (
Content-Encoding: br).
Y la parte que evita el pánico: un servidor HTTP puro de Node no decodifica un cuerpo Brotli solo por recibirlo. Es decir, no toda app Node está expuesta — pero basta uno de los patrones de arriba (y son comunes en APIs e integraciones) para estarlo. La pregunta correcta no es “¿uso Node?”, sino “¿mi aplicación descomprime Brotli de alguna fuente que no controlo?”.
Cómo funciona la falla
En lenguaje llano: el descompresor Brotli sigue trabajando después de una condición que debería haberlo detenido. Una transición interna que la estructura del flujo vuelve imposible termina interpretándose como “necesito más datos”, y la decodificación continúa desde un estado inválido — el momento en que puede escribir más allá del espacio reservado en memoria. Esa corrupción de memoria es la que, encadenada, abre la puerta al resto. La corrección upstream es justamente hacer que el decoder devuelva un error de formato y lo pase a quien lo llamó, en vez de seguir adelante. (No vamos a publicar detalles de explotación aquí.)
¿Está siendo explotada?
Vale ser honestos sobre la etapa, sin exagerar ni minimizar. Imperva demostró ejecución remota de código en una prueba de concepto contra la imagen oficial de Node.js 24.22.0 (el mismo payload fue rechazado en la 24.22.1 ya corregida) — así que no es solo teoría, aunque el exploit no funciona en cada intento y no fue publicado. En paralelo, parte de los investigadores argumenta que, en muchos escenarios, el efecto práctico se queda en negación de servicio. El punto decisivo para quien decide: el 27 de octubre de 2026 CISA incluyó la CVE-2026-111497 en su catálogo KEV (vulnerabilidades con explotación confirmada), con plazo del 10 de noviembre para que las agencias federales de EE. UU. la corrijan. Cuando algo entra al KEV, la conversación deja de ser “si” y pasa a ser “cuándo” — el momento de actualizar es ahora.
Cómo corregir ahora
- Descubre dónde está Brotli. No mires solo Node: mapea servicios en .NET, scripts en PowerShell, dependencias de Python (
Brotli/brotlicffi) y proxies como Envoy/Istio. La pregunta es por runtime y por biblioteca, no por app. - Actualiza el runtime. En Node.js, a una versión corregida (lanzadas el 21/10/2026):
En .NET, aplica la actualización fuera de ciclo de Microsoft (25/10); en Python, sube los paquetes Brotli a 1.2.1 / 1.2.1.0.Node.js 22.x → 22.23.4 Node.js 24.x → 24.22.1 Node.js 26.x → 26.12.1 - Reinicia el proceso y reconstruye las imágenes. Este paso es fácil de olvidar: un proceso ya en ejecución sigue usando el código Brotli viejo (vulnerable) cargado en memoria. Actualizar el paquete no basta sin reiniciar el servicio — y, en contenedores, sin reconstruir la imagen sobre la base ya corregida.
- ¿Línea sin soporte? Node.js 20.x llegó al fin de vida en abril de 2026 y no recibió corrección oficial — si todavía corres en ella, migra a una línea con soporte en vez de esperar un parche.
- WAF como capa temporal. Las reglas de WAF para el vector conocido ayudan a ganar tiempo (la propia Imperva publicó protecciones), pero no cierran la falla — el parche es la única corrección definitiva.
La lección que queda: tu superficie incluye las dependencias
Node2Shell es un recordatorio de una verdad incómoda: no corres solo el código que escribiste. Corres una pila de bibliotecas de terceros compiladas dentro, y la falla de una de ellas se vuelve tu falla — a veces en lugares que ni asociabas con esa dependencia (¿quién imaginaría que una falla de compresión aparecería en PowerShell y en .NET al mismo tiempo?). Es el mismo tipo de riesgo de cadena de suministro que vimos en el ataque vía ConnectWise, solo que ahora por la vía de la dependencia incrustada, no del proveedor SaaS.
Por eso un inventario honesto de dependencias (SBOM) y un pentest que pruebe la aplicación como lo haría un adversario real — incluyendo los puntos donde procesa datos de fuera — valen más que confiar en que “está todo actualizado”. Si quieres mapear dónde tu plataforma procesa entrada no confiable y dónde eso se vuelve riesgo, habla con un investigador. Y, de forma más amplia, un pentest periódico encuentra esas puertas antes de que se vuelvan titular.
Fuentes y análisis: NVD CVE-2026-111497, CISA KEV, Imperva, SecurityWeek y Akamai. Los números de versión y el estado de explotación pueden revisarse conforme avanza la investigación — confirma siempre en el aviso oficial de tu runtime y tu distribución.
Siguiente paso
¿Quieres aplicar esto a tu sistema?
No Vuln hace pentests en profundidad con la misma metodología descrita en este artículo. Solicita una propuesta: NDA bilateral en 24h y alcance definido en una llamada técnica.