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
- 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.
- 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__, constructor, prototype 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).
- 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.




