CVE-2026-44267 · GHSA-33r5-xmm8-v6x5
Elo JavaScript emitter has sandbox escape to arbitrary Node.js / browser code execution via unfiltered `.constructor` member access
- Risk score
- 79/100
- CVSS
- 9.8 v3.1
- Published
- 3 Nov 2026
Open in the live forecast Today's forecast
What to know
- What it is
- A vulnerability in Elo's JavaScript emitter allows an attacker to execute arbitrary Node.js or browser code via unfiltered `.constructor` member access. This could lead to browser script execution and session compromise, or arbitrary Node.js code execution on hosts.
- Affected
- {'products': ['Elo'], 'packages': [{'ecosystem': 'npm', 'name': '@enspirit/elo', 'versions': ['<= 1.0.0']}]}
- Fix
- Upgrade to version 1.0.1
- Exploitation
- Public proof of concept
Story map
At a glance
@enspirit/elo: Amber, patch this week. A vulnerability in Elo's JavaScript emitter allows an attacker to execute arbitrary Node.js or browser code via unfiltered `.constructor` member access. This could lead to browser script execution and session compromise, or arbitrary Node.js code execution on hosts.
The flaws
- CVE-2026-44267: Elo JavaScript emitter has sandbox escape to arbitrary Node.js / browser code execution via unfiltered `.constructor` member access (CVSS 9.8)
- CVE-2026-44266: Elo Ruby backend has Remote Code Execution via unescaped `#{...}` interpolation in emitted string literals and subtype-constraint labels (CVSS 9.8)
- CVE-2026-44265: Elo backends have code injection via unvalidated emission of programmatic AST fields (CVSS 7.4)
The fix
Upgrade @enspirit/elo: 1.0.1 or later on your release line
Who is exposed: {'products': ['Elo'], 'packages': [{'ecosystem': 'npm', 'name': '@enspirit/elo', 'versions': ['<= 1.0.0']}]}
Where it stands
- Public proof of concept
Connects to
- Same weakness: Cross-site scripting (CWE-79). 399 other warnings in 30 days
Why it is Amber
- CVSS 9.8 critical
- Public exploit or proof of concept referenced
- Remotely exploitable without logging in
- On your watchlist: node.js, npm
Affected packages
| Package | Ecosystem | Vulnerable | Fixed in |
|---|---|---|---|
| @enspirit/elo | npm | <= 1.0.0 | 1.0.1 |
References
- https://github.com/advisories/GHSA-33r5-xmm8-v6x5
- https://github.com/enspirit/elo/security/advisories/GHSA-33r5-xmm8-v6x5
- https://github.com/advisories/GHSA-33r5-xmm8-v6x5
- https://github.com/enspirit/elo/commit/2136da1f64eec8ebf99890d3100be9394534b842
- https://github.com/enspirit/elo/commit/d2a89a8db76a244eb740687524a7e8529b7554b5
Original description
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.
Last activity 3 Nov 2026. Patch Forecast updates every hour.