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.
4 min de lectura

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
| Proyecto | Corregido en |
|---|---|
| Google Brotli (biblioteca en C) | 1.0.10, 1.1.1, 1.2.1 |
| Brotli en PyPI | 1.2.1 |
| brotlicffi en PyPI | 1.2.1.0 |
| Node.js | 22.23.4, 24.22.1, 26.12.1 |
| Bun | 1.4.4 |
| Envoy | 1.40.0, 1.39.3, 1.38.6, 1.37.8 |
| Istio | 1.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
- Node2Shell Brotli vuln (CVE-2026-111497) evolves to HTTP2Shell, as libraries and apps using HTTP are affected - Aikido Security
- Node2Shell: Fixed Node.js Versions and Check - Brandefense
- Wednesday, October 21, 2026 Security Releases - Node.js
- google/brotli releases - GitHub (google/brotli)
Artículos relacionados

Python 3.15.1, 3.14.9 y 3.13.17 incluyen pip 26.2.2
Python 3.15.1, 3.14.9 y 3.13.17 salieron el 21 de octubre de 2026. Incluyen pip 26.2.2 y certifi 2026.10.19 para dejar de confiar en la autoridad eMudhra.

Rejetto HFS CVE-2026-61500, explotada un día después de publicarse su análisis
HFS 3.0.0 a 3.2.0 firma los inicios de sesión con Math.random(), un fallo que encontró Mythos de Anthropic. Los ataques empezaron el 3 de octubre, un día después del análisis. La 3.2.1 lo corrige.

Python 3.10 llega al fin de su vida útil y cinco versiones corrigen 8 CVE
Python 3.10.22 es la última versión de la rama 3.10: llegó al fin de su vida útil el 1 de octubre de 2026, mientras 3.11 a 3.14 recibían correcciones para hasta ocho CVE.