Descripción
Elo es un lenguaje de expresiones puramente funcional para herramientas no-code. En versiones anteriores a la 1.0.1, las cadenas Elo simples suministradas a defaultFormats.elo.parse(), bin/elo o elo-lang.org/try pueden usar .constructor.constructor para llegar a Function de JavaScript, debido a que el manejador member_access en src/transform.ts no rechaza las metapropiedades, src/compilers/javascript.ts emite directamente la propiedad resultante y src/parser.ts acepta constructor como un identificador ordinario. El JavaScript generado resultante ejecuta código elegido por el atacante en el entorno de ejecución anfitrión. Esto permite la ejecución de scripts en el navegador y el compromiso de la sesión en el playground de ejecución automática, y la ejecución de código arbitrario de Node.js en hosts de bibliotecas, CI o DevOps. Esta ruta de cadena simple es distinta del problema de inyección programática de objetos AST. Este problema está corregido en la versión 1.0.1.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- elo Afectadas: < 1.0.1
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en github.comgithub.com/enspirit/elo/security/advisories/GHSA-33r5-xmm8-v6x5
- Referencia en github.comgithub.com/enspirit/elo/commit/2136da1f64eec8ebf99890d3100be9394534b8…
- Referencia en github.comgithub.com/enspirit/elo/commit/d2a89a8db76a244eb740687524a7e8529b7554…
Ver el texto original en inglés (CVE.org)
Elo: Sandbox escape to arbitrary Node.js / browser code execution via unfiltered `.constructor` member access in Elo JavaScript emitter
Elo is a purely functional expression language for no-code tools. Prior to 1.0.1, plain Elo strings supplied to defaultFormats.elo.parse(), bin/elo, or elo-lang.org/try can use .constructor.constructor to reach JavaScript Function because the member_access handler in src/transform.ts does not reject meta-properties, src/compilers/javascript.ts emits the surviving property directly, and src/parser.ts accepts constructor as an ordinary identifier. The resulting generated JavaScript executes attacker-selected code in the host runtime. This permits browser script execution and session compromise on the auto-running playground and arbitrary Node.js code execution on library, CI, or DevOps hosts. This plain-string path is distinct from the programmatic AST-object injection issue. This issue is fixed in version 1.0.1.