
Kit de herramientas de aviso y prueba de concepto para CVE-2026-111497 (Node2Shell), un desbordamiento de montículo de Brotli en Node.js, con scripts de activación, verificador de versiones y guía de remediación.
Node2Shell
Aviso de seguridad integral, análisis técnico y guía de remediación para CVE-2026-111497
Divulgada en octubre de 2026, Node2Shell (CVE-2026-111497) es una vulnerabilidad de seguridad crítica que afecta al componente nativo de descompresión Brotli incluido directamente en el binario del runtime de Node.js.
La falla permite a atacantes remotos ejecutar código arbitrario o provocar el bloqueo de la aplicación mediante el envío de flujos de bytes comprimidos con Brotli especialmente manipulados y malformados a cualquier aplicación Node.js que procese entrada comprimida (por ejemplo, analizadores del cuerpo de solicitudes HTTP, llamadas nativas a fetch() o flujos WebSocket).
⚠️ NOTA CRÍTICA: Dado que el código vulnerable reside dentro de
deps/brotli, compilado en el propio ejecutable de Node.js, actualizar las dependencias denpmen el espacio de usuario no mitigará esta vulnerabilidad. Es necesario actualizar el runtime binario de Node.js.
deps/brotli).Content-Encoding: br).fetch() nativo que procesa respuestas automatizadas de endpoints de terceros no confiables que sirven contenido comprimido.zlib.createBrotliDecompress().| Línea de versión de Node.js | Estado | Versión corregida | Acción requerida |
|---|---|---|---|
| Node.js 26.x | ⚠️ Vulnerable | >= 26.12.1 | Actualizar inmediatamente |
| Node.js 24.x | ⚠️ Vulnerable | >= 24.22.1 | Actualizar inmediatamente |
| Node.js 22.x (LTS) | ⚠️ Vulnerable | >= 22.23.4 | Actualizar inmediatamente |
| Node.js 20.x y anteriores | ❌ EOL | Ninguna | Migrar inmediatamente a una LTS compatible |
🚨 Alerta de EOL: Node.js 20 alcanzó el fin de vida (EOL) en abril de 2026. No hay backports de seguridad oficiales disponibles para las versiones EOL.
$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.
Current Node.js version : v24.22.1
Brotli constant present : yes (-17) → patched decoder
───────────────────────────────────────────────────────
Verdict: PATCHED
You are running a fixed release of the 24.x line.
Additional notes:
• The constant check is the most reliable signal when Node.js ships
its own (statically linked) Brotli. On some Linux distros Node may
use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1
$ node node2shell-check.js
=== Node2Shell (CVE-2026-111497) Safe Checker ===
Local version + constant probe only. No network, no payloads.
Current Node.js version : v24.22.0
Brotli constant present : no / missing → likely vulnerable decoder
───────────────────────────────────────────────────────
Verdict: VULNERABLE
Upgrade to Node.js 24.22.1 or later in the 24.x line.
Additional notes:
• The constant check is the most reliable signal when Node.js ships
its own (statically linked) Brotli. On some Linux distros Node may
use the system libbrotli – then you must also check the system package.
• Updating npm packages alone does NOT fix this issue.
• After upgrading, restart every Node.js process / container.
• Official fixed versions: 22.23.4 · 24.22.1 · 26.12.1
Current Node.js version : v20.18.0
Brotli constant present : no / missing → likely vulnerable decoder
Verdict: VULNERABLE (EOL / UNSUPPORTED)
This release line is end-of-life or never received the security fix.
Migrate to a supported LTS line (22.x, 24.x or 26.x) and use a patched version.
También puedes ejecutar este one-liner:
node -p "require('zlib').constants.BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH ?? 'missing'"
-17 → parcheadomissing → vulnerableEsa es la misma comprobación que utiliza el script.
# Python dependencies
pip install requests brotli
# Node server (webhook injection + eval paths)
npm install
node server-stock.js # port 3000