Skip to main content
← Vulnerabilities

Elo: Sandbox escape to arbitrary Node.js / browser code execution via unfiltered `.constructor` member access in Elo JavaScript emitter

Affects enspirit elo and @enspirit/elo versions 1.0.0 and earlier when plain Elo strings are parsed via defaultFormats.elo.parse(), the bin/elo CLI, or the elo-lang.org/try playground. Fixed in 1.0.1.

Written by anthropic/claude-haiku-5.5 from the sources below. Verify against them.

9.8CriticalCNA
Exploited
No known exploitation
Fix
Fixed in 1.0.1
Who is exposed
Default setups

Do first: Check every install: default setups are affected.

42Pcve.now Index 42 of 100 · methodology v3 · provisional
  • Exploitation?/40Exploitation: unknown (data gap). No CISA SSVC exploitation rating yet
  • Exposure22/25Default setups, reachable over the network without a login
  • Reach10/20Affects npm packages
  • Severity9.8/10CVSS 9.8
  • No patch0/5No signal

What would change the score

  • Would score about 82 if added to CISA KEV
  • Would score about 77 if CISA's SSVC rates exploitation active

CVE-2026-44267 is not in CISA's Known Exploited Vulnerabilities (KEV) catalog. No public exploit code is tracked. It is rated CVSS 9.8 (critical) and affects elo; fixed in 1.0.1.

Published
Last modified
Published
Not listed in CISA KEV
42/100 · provisional
Default setups
Fix
Fixed in 1.0.1
None on Exploit-DB, Metasploit or GitHub
On X
View the cve.now post

Summary

Elo, a purely functional expression language used in no-code tools, is affected, including its parser, compiler, and command-line tool. A flaw lets specially crafted expression strings escape the language's sandbox and run arbitrary JavaScript, which can execute code on Node.js servers, CI, or DevOps hosts and run scripts in the browser playground, potentially compromising user sessions.

Read the 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.

Impact

  • Widely used

    @enspirit/elo has 757 weekly downloads.Source: npmjs.com

What to do

  • Check every install: default setups are affected.

  • Upgrade to a fixed version: 1.0.1.

Timeline

  1. CVE published
  2. First seen by cve.now
  3. Posted on X by cve.now

Affected versions

  • enspirit elo

    fixed in 1.0.1

  • @enspirit/elonpm

    fixed in 1.0.1

Evidence 3

  1. Advisory
  2. Repository
  3. Repository

Corrections

None so far.

Something wrong on this page? Report an error. Every fix is listed here.

FAQ

Questions about CVE-2026-44267

Is CVE-2026-44267 being exploited?

It is not in CISA's Known Exploited Vulnerabilities catalog, and CISA's SSVC assessment does not mark exploitation as active. That does not mean it has not been attacked: vendors and researchers can report attacks before CISA lists them. No public exploit code is tracked.Source: cve.now feed data

What does this mean?

Elo's JavaScript emitter does not filter .constructor member access. A plain Elo expression that chains .constructor.constructor compiles unchanged into JavaScript that calls the Function constructor, which escapes the Elo sandbox and can run arbitrary Node.js or browser code.Source: github.com

Which versions are affected by CVE-2026-44267?

elo: before 1.0.1. @enspirit/elo (npm): before 1.0.1.Source: cve.now feed data

Am I affected, and how do I check?

Versions 1.0.0 and earlier of both enspirit elo and @enspirit/elo are affected, and 1.0.1 is the fixed version. The bug is reached through plain Elo strings passed to defaultFormats.elo.parse(), the bin/elo CLI, or the elo-lang.org/try playground, and the expression must use member access on an object, array, or any-typed value to reach the constructor property. To check a project, look at the installed @enspirit/elo version in package.json or the lockfile, or run the elo CLI to see its version.Source: github.com

How do I fix CVE-2026-44267?

Upgrade @enspirit/elo (and enspirit elo) to version 1.0.1 or later.Source: github.com