Saltar al contenido

Seguridad

Node2Shell (CVE-2026-111497): qué bloquea el borde de OpenWAF y qué tienes que parchear tú

Un flujo Brotli manipulado puede ejecutar código en cualquier proceso que lo decodifique. El borde de OpenWAF rechaza ya por defecto los cuerpos de petición Brotli (escudo 1009). Las respuestas que descarga tu código siguen siendo cosa tuya: actualiza Node.js y Brotli.

Por el equipo de seguridad de OpenWAF

5 min de lectura

Compartir

En resumen. Node2Shell (CVE-2026-111497, también llamado HTTP2Shell o Brotli2Shell) es una escritura fuera de límites en el decodificador Brotli de Google escrito en C, corregida en Brotli 1.2.1. Un flujo Brotli manipulado puede dar a un atacante ejecución remota de código en cualquier proceso que lo decodifique. Se está explotando.

  • Actualiza Node.js a 22.23.4, 24.22.1 o 26.12.1, y cualquier otro componente que incluya Brotli.
  • Desde las 20:52 UTC del 30 de octubre de 2026 el borde de OpenWAF rechaza los cuerpos de petición codificados con Brotli (escudo 1009), activo por defecto en todos los sitios.
  • El borde no ve las respuestas Brotli que descarga tu propio código ni el tráfico que no pasa por él. La solución sigue siendo parchear.

Qué es Node2Shell

El fallo está en DecodeBlockTypeAndLength, en c/dec/decode.c de la biblioteca Brotli de referencia. Imperva lo llamó Node2Shell, JFrog mostró que llega mucho más allá de Node.js con el nombre Brotli2Shell, y el proyecto Node.js publicó versiones corregidas el 21 de octubre de 2026. Tiene una puntuación CVSS de 9,2. CISA lo añadió a su catálogo de vulnerabilidades explotadas (KEV) el 27 de octubre, y Sophos informa de explotación activa.

A quién afecta

Estás expuesto de dos formas:

  • Servidores que decodifican cuerpos de petición enviados con Content-Encoding: br: Express 5 y body-parser 2.x sobre Node.js sin parchear, la descompresión de peticiones de ASP.NET Core, la interfaz HTTP de ClickHouse, servicios Python que usan brotli o brotlicffi y la extensión brotli de PHP.
  • Clientes HTTP que decodifican respuestas Brotli: fetch() de Node.js, HttpClient de .NET y, en Python, requests, httpx, aiohttp o urllib3 cuando brotli está instalado. A un servidor que controle el atacante le basta con responder con un cuerpo manipulado.

Qué hace ya el borde de OpenWAF

El escudo 1009 «Brotli Request Body» rechaza toda petición con cuerpo cuyo Content-Encoding incluya br, antes de que llegue a tu origen. La cabecera se reconoce en mayúsculas o minúsculas y en cualquier posición de la lista, también en gzip, br o repartida en varias líneas Content-Encoding. La petición recibe un 403 con tu página de bloqueo. Está activo en todos los nodos de borde desde las 20:52 UTC del 30 de octubre de 2026 y viene activado por defecto en todos los sitios: no tienes que cambiar nada.

Nada más cambia. Las peticiones sin cuerpo y los cuerpos codificados con gzip, deflate, zstd o identity pasan como antes, las respuestas no se tocan y los navegadores nunca envían cuerpos de petición Brotli, así que tus visitantes no lo notan. Como todos los escudos, el 1009 bloquea en modo active, solo registra en modo log y no se ejecuta con el WAF en off.

El decodificador Brotli del propio borde es una versión en Go con el mismo error lógico pero sin corrupción de memoria. También está actualizado.

Si tu API acepta cuerpos Brotli

Algunas API aceptan a propósito cuerpos comprimidos con Brotli, por ejemplo un punto de ingesta que alimentan tus propios agentes. Parchea primero ese origen y después añade una excepción del WAF para la regla 1009 solo en esa ruta y limitada al nombre que la necesita. Puedes hacerlo desde el panel (Seguridad → Firewall → Reglas → Excepciones del WAF), la CLI, la API o la herramienta MCP add_rule; el aviso tiene los comandos exactos. Una excepción con rule_id 0 no desactiva el escudo.

Qué no cubre el borde

  • Las respuestas que descarga tu código. Si tus servidores llaman a fetch() u otro cliente HTTP con una URL que pueda elegir un atacante, la respuesta manipulada les llega directamente.
  • El tráfico que se salta el borde. Las peticiones que llegan a tu origen por su dirección IP o por otro nombre no se inspeccionan. Acepta conexiones solo desde el borde de OpenWAF y usa TLS de origen Full (strict).
  • Los nombres solo DNS, los sitios en modo log y los sitios con el WAF en off.
  • Otras vías de entrada: ficheros subidos, colas, brokers de mensajes o ficheros en almacenamiento que tu software decodifique.

Qué tienes que parchear

SoftwareCorregido en
Node.js22.23.4, 24.22.1 o 26.12.1 y posteriores. Las ramas sin soporte no reciben parche: pasa a una con soporte. Comprueba node -v también dentro de tus imágenes de contenedor.
brotli / brotlicffi de PythonLas versiones basadas en Brotli 1.2.1.
PHPLas versiones de php.net del 26 de octubre de 2026.
.NETLa actualización de mantenimiento de octubre de 2026.
libbrotli del sistemaLa actualización de seguridad de tu distribución; después reinicia los servicios que la cargan.
Cualquier otro software que incluya Brotli anterior a 1.2.1Su versión parcheada (FFmpeg, libjxl, ClickHouse, Apache Arrow y otros).

Hemos seguido el mismo consejo: parcheamos nuestros propios servicios Node.js el mismo día que se activó el escudo.

Cómo revisar tus registros

Las peticiones rechazadas aparecen en los eventos de seguridad con rule_id 1009 y rule_name Brotli Request Body. En el panel, abre Analítica → Tráfico → Eventos de seguridad y añade el filtro Regla es 1009, o pregunta a la API:

curl -s "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/events?rule_id=1009&since=2026-10-27T00:00:00Z" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"

Un evento solo indica que alguien lo intentó a través del borde. No dice si llegaron a tu origen por otra vía, así que revisa también los registros del propio origen.

Preguntas frecuentes

¿Se está explotando Node2Shell?

Sí. CISA añadió CVE-2026-111497 a su catálogo de vulnerabilidades explotadas (KEV) el 27 de octubre de 2026, y Sophos informa de explotación activa.

¿Tengo que hacer algo para tener el escudo 1009?

No. Está activo por defecto en todos los sitios que pasan por OpenWAF desde las 20:52 UTC del 30 de octubre de 2026. Bloquea cuando el WAF del sitio está en modo activo, solo registra en modo registro y no se ejecuta con el WAF desactivado.

¿El escudo 1009 puede romper mi sitio?

Los navegadores nunca envían cuerpos de petición Brotli, así que tus visitantes no lo notan. Solo lo notan las API que aceptan a propósito cuerpos comprimidos con Brotli: parchea ese origen y añade una excepción del WAF para la regla 1009 en esa ruta.

¿Me protege el borde si parcheo más tarde?

Solo en parte. Frena los cuerpos de petición manipulados que llegan a nombres con proxy. No ve las respuestas Brotli que descarga tu propio código, el tráfico que llega directo a tu origen ni los datos Brotli que entran por otras vías. Actualiza Node.js y Brotli.

Fuentes

Temas

  • Node2Shell
  • Brotli2Shell
  • HTTP2Shell
  • CVE-2026-111497
  • Brotli
  • Node.js RCE
  • Content-Encoding br
  • CISA KEV
  • shield 1009

Autor

OpenWAF

Sigue leyendo

Ver todo

Trae las webs de tu agencia a OpenWAF.

OpenWAF es gratis hasta 100 dominios por cuenta. Crea tu cuenta, añade los dominios de tus clientes y cambia sus servidores de nombres o añade un CNAME: el panel te guía en cada paso.