Node.js corrige una vulnerabilidad de ejecución remota de código en el decodificador Brotli integrado
Node.js publicó actualizaciones de seguridad para las versiones 22, 24 y 26 para corregir una escritura fuera de límites de alta severidad en el decodificador Brotli que podría permitir la ejecución remota de código.
Traducido automáticamente del original en inglés.
Node.js lanzó actualizaciones de seguridad críticas el 21 de octubre para sus tres líneas de soporte: 22.x, 24.x y 26.x. La corrección más importante aborda una vulnerabilidad en la biblioteca de descompresión Brotli integrada que podría permitir a los atacantes ejecutar código arbitrario en los sistemas afectados. Los desarrolladores que utilicen versiones con fin de vida útil (EOL), como Node.js 20.x, deben actualizar inmediatamente, ya que estas líneas antiguas no recibirán parches.
Qué ocurrió
El proyecto Node.js corrigió diez fallos distintos en este ciclo de lanzamiento, pero la principal preocupación es CVE-2026-111497, una vulnerabilidad de escritura fuera de límites en el decodificador Brotli. Este error existe en la copia de la biblioteca Brotli de Google que Node.js incluye internamente, lo que significa que afecta a cualquier aplicación que descomprima datos Brotli, ya sea a través del módulo node:zlib o automáticamente mediante respuestas de fetch(). La vulnerabilidad se activa por entrada comprimida mal formada, lo que hace que el decodificador escriba datos más allá del búfer de memoria asignado.
Aunque el proyecto clasifica este fallo como de alta severidad con potencial de ejecución remota de código (RCE), la explotación práctica parece difícil. Una prueba de concepto pública publicada el 22 de octubre demostró la ejecución de código solo en una compilación de prueba deliberadamente debilitada. En las compilaciones estándar, el exploit causó un bloqueo y una lectura limitada de memoria en lugar de una ejecución completa de código. Hasta el 22 de octubre, no se ha reportado ninguna explotación activa en entornos reales, y las versiones parcheadas ahora rechazan la entrada mal formada utilizada en estas pruebas.
Además del problema de Brotli, la actualización aborda otras tres vulnerabilidades de alta severidad. Dos implican comprobaciones de certificados TLS que los atacantes podrían eludir utilizando formas no canónicas de direcciones IP o dígitos de ancho completo, permitiendo que los certificados coincidan con hosts con los que no deberían hacerlo. La tercera corrección de alta severidad evita que dns.resolve trunque nombres de host que contienen bytes nulos incrustados. Las correcciones restantes cubren problemas de severidad media y baja, incluyendo fallos en la generación de números aleatorios en instantáneas de inicio y elusiones del modelo de permisos.
Cómo funciona
Brotli es un algoritmo de compresión desarrollado por Google, ampliamente utilizado para contenido web porque ofrece mejores ratios de compresión que gzip. Node.js integra su propia copia del código fuente de Brotli en lugar de depender de una biblioteca a nivel de sistema. Cuando una aplicación recibe datos comprimidos, el decodificador interno procesa el flujo de bits para reconstruir el contenido original. La vulnerabilidad surgió porque el decodificador no validaba correctamente ciertos casos límite en entradas mal formadas, lo que llevaba a una escritura fuera de límites. Esto significa que el programa escribía datos en una ubicación de memoria a la que no tenía autorización de acceso, lo que puede corromper la memoria o permitir a un atacante inyectar y ejecutar código malicioso.
La corrección implica un parche upstream del proyecto Brotli, que Node.js incorporó en su base de código. Este parche añade comprobaciones de validación más estrictas que hacen que el decodificador falle temprana y de forma segura al encontrar entrada inválida, previniendo la corrupción de memoria. Dado que muchos otros proyectos de software también integran sus propias copias de Brotli, es probable que se requieran actualizaciones similares en todo el ecosistema más amplio. La misma corrección se lanzó en las versiones de Brotli 1.2.1, 1.1.1 y 1.0.10 el 21 de octubre.
Detalles clave
- Versiones corregidas: Node.js 22.23.4, 24.22.1 y 26.12.1 contienen los parches necesarios.
- Advertencia de fin de vida útil: Node.js 20.x y anteriores no tienen soporte y no recibirán esta corrección; se requiere migración.
- Vector de ataque: Las aplicaciones están expuestas si descomprimen datos Brotli desde fuentes no confiables, como cuerpos de solicitudes o respuestas de API externas.
- Bloqueo de certificados: La actualización también bloquea ocho claves comprometidas de autoridades intermedias de certificación de eMudhra y elimina tres raíces emSign.
- Actualizaciones de dependencias: Se actualizaron las versiones integradas de undici, c-ares, OpenSSL (en 22.x y 24.x) y SQLite (en 22.x) para corregir otras vulnerabilidades conocidas.
- Sin solución alternativa: No existe una mitigación temporal dentro de Node.js para el fallo de Brotli; la actualización es la única solución.
Por qué importa
Para ingenieros backend y líderes técnicos, esta actualización destaca los riesgos inherentes a la integración de bibliotecas de terceros. Aunque el código no fue escrito por el equipo de Node.js, la responsabilidad de asegurarlo recae en los mantenedores del runtime y, en última instancia, en los desarrolladores que lo despliegan. El hecho de que la vulnerabilidad exista en procesos automáticos como fetch() significa que incluso las aplicaciones que no utilizan explícitamente bibliotecas de compresión pueden estar en riesgo si interactúan con servicios externos que devuelven datos comprimidos con Brotli.
La inclusión del bloqueo de certificados de eMudhra también subraya la importancia de los almacenes de confianza en las comunicaciones seguras. Dado que Node.js no realiza comprobaciones de revocación por defecto, las claves comprometidas de autoridades de certificación pueden permanecer confiadas hasta que sean bloqueadas explícitamente. Esta versión sirve como recordatorio de que la seguridad no consiste solo en corregir errores de código, sino también en mantener la integridad de la infraestructura criptográfica que sustenta las conexiones seguras.
Qué puedes hacer
- Actualiza inmediatamente a Node.js 22.23.4, 24.22.1 o 26.12.1 según tu línea de versión actual.
- Migra cualquier aplicación que aún ejecute Node.js 20.x o anterior a una versión con soporte.
- Revisa los despliegues personalizados o las aplicaciones ejecutables únicas para asegurarte de que se reconstruyen con las versiones parcheadas.
- Monitoriza los registros en busca de bloqueos inusuales o errores de memoria que puedan indicar intentos de explotación antes de aplicar el parche.
- Verifica que tus pipelines de CI/CD estén configurados para extraer las últimas imágenes base parcheadas para despliegues contenerizados.
- Si la actualización inmediata no es posible, considera implementar reglas de firewall a nivel de red para bloquear solicitudes entrantes sospechosas, aunque esto no protege contra vulnerabilidades de fetch salientes.



