La popular librería JavaScript ‘expr-eval’ es vulnerable a la Ejecución Remota de Código (RCE)

La librería expr-eval —un parser y evaluador de expresiones matemáticas utilizado en apps web y herramientas de análisis, con más de 800,000 descargas semanales en npm— ha sido identificada con una vulnerabilidad crítica (CVE-2025-12735) que puede ser explotada para lograr Ejecución Remota de Código (RCE) a partir de una entrada maliciosa.


 CVE-2025-12735: RCE por Contaminación de Variables en expr-eval 

La falla reside en la validación insuficiente en la API evaluate() de expr-eval, permitiendo la manipulación del contexto de ejecución (prototype pollution).


 Mecanismo de Explotación 
  • Falla de Validación: El atacante controla el objeto de variables que se pasa a la función evaluate(). La librería falla al validar este objeto. 
  • Inyección en Metadatos: Mediante un objeto de variables especialmente manipulado, el atacante puede inducir la ejecución de constructores o propiedades peligrosas. La superficie de ataque no está solo en el texto de la expresión, sino en los metadatos que acompañan la evaluación. 
  • Resultado: Esto provoca que la librería ejecute código arbitrario en el contexto de la aplicación, lo que resulta en RCE en servidores Node.js o escalada de privilegios en contenedores. 
  • Riesgo en AI/NLP: En entornos de IA/NLP donde se usan expresiones para pre/procesamiento, una entrada maliciosa puede convertir una API aparentemente inofensiva en un vector de compromiso. 

Detalles Críticos 
  • Objetivo Olvidado: Los desarrolladores suelen centrarse en validar la cadena de la expresión, no el objeto de variables que acompaña a la evaluación. 
  • Evasión de Sandboxes: Muchos sandboxes fallan en la detección porque solo inspeccionan la cadena de expresión, sin analizar el objeto de contexto y la forma en que el motor resuelve propiedades (ej., __proto__constructor). 

 Recomendaciones 
  1. Parchear / Actualizar
  • Actualización Urgente: Actualizar expr-eval a la versión corregida indicada en el aviso oficial (CVE-2025-12735). Si utilizas lockfiles, regenera package-lock.json o yarn.lock y redepliega. 
  • Análisis SBOM: Ejecutar un análisis SBOM (Software Bill of Materials) para identificar dependencias transitivas que incluyan expr-eval y priorizar el parcheo en servicios expuestos públicamente. 
  1. Mitigaciones Temporales (Si no puedes parchear)
  • Sanitización del Objeto Variables: Filtrar y sanitizar el objeto de variables que se pasa a evaluate(). Rechazar claves que contengan __proto__constructorprototype o cualquier nombre no alfanumérico. 
  • Aislamiento: Ejecutar el evaluador en un proceso aislado (worker, contenedor) con límites estrictos (sin mounts sensibles, sin credenciales, uso de seccomp/AppArmor). 
  • Permisos Reducidos: Aplicar políticas de ejecución (runtime) que limiten los permisos del proceso Node.js (usuario no root, sistema de archivos de solo lectura). 
  1. Detección yHunting
  • Monitoreo de Comportamiento: Monitorear la creación de procesos inesperados, forks o llamadas al sistema en procesos Node.js que usen expr-eval. 
  • Reglas de Detección: Agregar reglas que detecten llamadas a evaluate() con payloads de gran tamaño o con objetos variables que contengan claves sospechosas (__proto__constructor) pasadas a los endpoints de evaluación. 

Related Post