Alerta de seguridad
Nivel de peligrosidad: Crítico
Descripción
Vulnerabilidad crítica de escape de sandbox que afecta a vm2, un entorno de aislamiento popular para Node.js. Esta vulnerabilidad cuenta con una puntuación CVSS de 9.8 (Crítica). Permite a los atacantes evadir la sanitización de los callbacks de promesas (promise callbacks) de vm2, logrando romper el aislamiento del sandbox y ejecutando código arbitrario en el sistema host.
Vm2 intenta mantener el entorno restringido mediante la sanitización de las funciones de retrollamada (callback functions), especialmente aquellas vinculadas a promesas. Sin embargo, no lo logra del todo. Específicamente, el archivo lib/setup-sandbox.js sanitiza los callbacks para localPromise.prototype.then.
Sin embargo omite por completo a globalPromise.prototype.then y globalPromise.prototype.catch. Y esa es una supervisión significativa. Las funciones asíncronas (async functions), por ejemplo, devuelven objetos globalPromise. Esto significa que cualquier callback adjunto al método then o catch de dicha promesa simplemente logrará eludir las defensas de vm2.
Recursos afectados
- Producto: vm2 (paquete npm para Node.js).
- Versiones vulnerables identificadas: todas anteriores a 3.10.2 (p. ej., ≤ 3.10.0 y 3.10.1).
- Corrección / ajuste: algunos reportes iniciales confundían la vulnerabilidad con versiones concretas como 3.10.0; fuentes confiables indican que todas las versiones previas a 3.10.2 son vulnerables.
Solución/Mitigación
Actualizar todas las instancias de vm2 a versión 3.10.2 o superior y verificar que estas actualizaciones se hayan propagado a todos los entornos. Para dependencias transitivas que arrastren versiones vulnerables, aplicar npm audit, actualizar el lockfile y reconstruir artefactos para forzar la resolución a la versión parcheada.
Mitigación temporal.
- Dejar de ejecutar código no confiable en instancias que usen vm2 hasta actualizar la librería.
- Aislar las aplicaciones que usan vm2: contenedores con capacidades mínimas, usuarios no root, perfiles de seguridad, y límites de recursos.
- Restringir salida de red y acceso al sistema de archivos desde procesos vm2 hasta que se aplique el parche.
Indicadores de compromiso
- Ejecuciones inesperadas de procesos Node.js invocando child_process.exec* o spawn desde contextos que normalmente no lo hacen.
- Registros de procesos hijos lanzados por Node.js relacionados con la aplicación afectada (sh, bash, utilidades del sistema).
- Eventos de ejecución de comandos inusuales capturados por auditorías del sistema.
- Cargas útiles que se asemejen a técnicas de bypass de sanitización de promesas.
Posibles señales de explotación.
- Aparición de nuevos archivos o binarios sospechosos.
- Procesos de Node que ejecutan comandos del sistema fuera de lo esperado.
- Conexiones salientes no justificadas desde hosts con vm2 vulnerable.
- Elevación de privilegios en procesos Node.js.
- Eventos de integridad de archivos que indiquen cambios inesperados.
Recomendaciones
- Priorizar la aplicación del parche oficial (vm2 ≥ 3.10.2).
- Aislar temporalmente servicios sospechosos si se sospecha compromiso.
- Revisar cuentas administrativas y rotar credenciales si se detecta acceso no autorizado.
- Activar monitoreo y alertas específicas de ejecución anómala.
- Incluir esta vulnerabilidad en gestión de riesgos y monitoreo continuo de la infraestructura.
- Realizar un análisis post-parcheo para confirmar que no hay persistencia o puertas traseras.
Referencias