Saltar al contenido

HTTP2Shell: el fallo de Brotli llega a Python, Bun y Envoy

CVE-2026-111497, el fallo del decodificador Brotli ahora llamado HTTP2Shell, obtiene una puntuación de 9,2 y alcanza a los entornos de requests y httpx de Python, Bun, Envoy e Istio.

Por Tech AI Wire Team

4 min de lectura

XLinkedIn
Un portátil plateado cerrado sobre un escritorio de madera con pegatinas de los logotipos de Node.js, Python y Bun en la tapa, junto a un teclado negro, una planta y una taza de café.

En cifras

CVSS v4.0 score, rated critical
9.2
Brotli versions with the bug
1.0.3-1.2.0
monthly downloads of Python's Brotli package
82.8M

Un fallo de memoria en el descompresor Brotli de Google tiene ahora un nombre más llamativo y un alcance mayor. CVE-2026-111497 se corrigió primero en Node.js el 21 de octubre de 2026 con el nombre de «Node2Shell». Desde última hora del 23 de octubre (UTC) se le llama «HTTP2Shell». El nuevo nombre refleja hasta dónde llega: las bibliotecas HTTP de Python, el runtime Bun y los proxies Envoy e Istio incluyen código afectado.

La empresa de seguridad Aikido le asigna una puntuación de 9,2 sobre 10 (crítica) según CVSS v4.0, la escala de gravedad estándar. Brotli es un formato de compresión que los servidores web y los navegadores usan para reducir el tamaño de los datos. Cualquier programa que descomprima datos Brotli de un desconocido puede estar expuesto.

Un fallo, dos nombres

HTTP2Shell no es un segundo fallo. «Es una sola CVE, no un segundo fallo», escribe en su seguimiento Brandefense, una empresa de inteligencia de amenazas. Es el mismo fallo del decodificador Brotli con una nueva etiqueta.

Tech AI Wire cubrió la primera ronda de correcciones en la actualización de seguridad de octubre de Node.js. Lo que ha cambiado desde entonces es la lista de proyectos afectados.

Cómo funciona el fallo

El fallo está en las versiones 1.0.3 a 1.2.0 de Brotli. El aviso de Node.js lo explica. Un «block switch» no válido en un flujo comprimido se trataba como una necesidad temporal de más datos de entrada, en lugar de como un error de formato. El decodificador seguía entonces escribiendo en un búfer interno de ocho bytes, más allá de su final.

Escribir más allá de un búfer puede hacer fallar un programa, filtrar memoria o, en el peor de los casos, permitir que un atacante ejecute código. Las propias notas de versión de Brotli dicen que la «escritura fuera de límites permite la ejecución remota de código».

El aviso de Node.js atribuye el reporte a OpenAI Codex Security, la herramienta automatizada de revisión de código de OpenAI. Según Aikido, OpenAI descubrió que el fallo funciona en ambas direcciones. Un cliente malicioso puede atacar a un servidor sin parchear, y un servidor malicioso puede atacar a un cliente sin parchear.

Aikido añade que la causa raíz se corrigió en el código fuente de Brotli en febrero. Nadie la señaló como corrección de seguridad, así que ninguna versión la incluyó hasta el 21 de octubre.

Por qué las aplicaciones de Python están expuestas

Muchas aplicaciones de Python usan Brotli sin importarlo nunca. Según Aikido, urllib3 y requests, httpx, aiohttp y Scrapy usan Brotli automáticamente cuando está instalado. El paquete Brotli de Python se descarga 82,8 millones de veces al mes.

Hay una segunda trampa. A fecha del 23 de octubre, ni el registro de la CVE, ni la base de datos OSV, ni la base de avisos de GitHub vinculaban la CVE con ninguno de los dos paquetes de Python, según Aikido. Por eso, pip-audit, Dependabot y Safety no marcarían una versión vulnerable.

Versiones corregidas

ProyectoCorregido en
Google Brotli (biblioteca en C)1.0.10, 1.1.1, 1.2.1
Brotli en PyPI1.2.1
brotlicffi en PyPI1.2.1.0
Node.js22.23.4, 24.22.1, 26.12.1
Bun1.4.4
Envoy1.40.0, 1.39.3, 1.38.6, 1.37.8
Istio1.29.9, 1.30.6, 1.31.2

Algunas versiones no reciben corrección. Node.js 20.x, 25.x y 18.x ya superaron el fin de su vida útil, y Brandefense cita a Vercel diciendo que Node 20 «no recibirá esta corrección». Brandefense también señala que los paquetes Brotli más recientes de Debian aún no tienen versión corregida. Según Aikido, mod_brotli de Apache y Nginx no decodifican Brotli por defecto.

¿Se está explotando?

Hasta las 22:00 UTC del 23 de octubre no se habían reportado ataques reales, según Brandefense. El fallo no figura en la lista de vulnerabilidades explotadas conocidas de la CISA.

Su gravedad real sigue en discusión. El investigador Ron Masas dice que su equipo reprodujo la ejecución remota de código sin iniciar sesión. Brandefense señala que el código de prueba de concepto publicado produce sobre todo bloqueos, y un análisis sostiene que solo es posible una denegación de servicio.

Qué significa para los desarrolladores

Primero aplica el parche y después revisa a mano tus archivos de bloqueo. Como puede que los escáneres no marquen los paquetes de Python, busca Brotli y brotlicffi en tus listas de dependencias y actualiza a 1.2.1 o 1.2.1.0.

No des por hecho que el servidor es el único objetivo. Si tu código obtiene datos de servidores externos con requests, httpx o aiohttp, un servidor hostil puede enviar el flujo malicioso. Aikido advierte que «cambiar solo Accept-Encoding es insuficiente», porque esa cabecera solo pide al servidor que no comprima.

En Node.js, comprueba qué decodifica tu framework. Según la lectura de Brandefense, Express 5 decodifica por defecto los cuerpos de solicitud en Brotli y Express 4 no. Masas resumió el riesgo sin rodeos: «app.use(express.json()) es suficiente».

Si usas Envoy o Istio como service mesh, actualiza también los proxies. Todo lo que incluya su propia copia de Brotli necesita recompilarse, no basta con actualizar el sistema. Donde aún no haya parche, Aikido recomienda desactivar la decodificación de Brotli.

A principios de esta semana, otro fallo de PHP, PHP2Shell, recibió intentos de ataque antes de su divulgación. Actúa con la misma rapidez ante este.

Fuentes

  1. Node2Shell Brotli vuln (CVE-2026-111497) evolves to HTTP2Shell, as libraries and apps using HTTP are affected - Aikido Security
  2. Node2Shell: Fixed Node.js Versions and Check - Brandefense
  3. Wednesday, October 21, 2026 Security Releases - Node.js
  4. google/brotli releases - GitHub (google/brotli)

Artículos relacionados