Skip to main content

Elo EUVDEUVD-2026-116111

| CVE-2026-44267 CRITICAL
Cross-site Scripting (XSS) (CWE-79)
2026-11-03 GitHub_M GHSA-33r5-xmm8-v6x5
9.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply crafted Elo string to a JS-emission path
  2. Exploit
    .constructor.constructor chain passes unfiltered member_access
  3. Execution
    Emitter writes it verbatim, building a live Function() call
  4. Impact
    Arbitrary attacker code executes in host runtime (browser session or Node.js host)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

No special configuration is required: default behavior of Elo <= 1.0.0 is affected wherever an attacker controls the plain Elo source string reaching a JavaScript-emission sink - defaultFormats.elo.parse(), the bin/elo CLI (including the -f elo flag that is documented to pass user files as data, and -e/-d @file), or the elo-lang.org/try playground with ?run=1 auto-execution. The only genuine prerequisites/limits are: the attacker must be able to supply the Elo string to one of these paths, and the deployment must run a vulnerable version (<= 1.0.0, fixed in 1.0.1). No authentication, no privileges, and no victim interaction are needed for the library/CLI paths; the playground path requires only that the victim open a crafted link (execution is then automatic). The vendor's patch (meta-property denylist) is the stated fix.

Impact

All severity signals point the same direction. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N, C:H/I:H/A:H, base 9.8) describes a trivially triggered, unauthenticated path to full arbitrary code execution, and my independent assessment agrees with every metric. The vuln.today decision label is act_now, which is the operative urgency signal here. A working proof-of-concept is published in the GHSA advisory - including a full child_process payload and a screen recording of end-to-end execution against the live production playground - so exploitation is proven, not theoretical. Two expected signals are absent from the input and must not be assumed present: there is no EPSS score supplied, and there is no CISA KEV entry, so this is NOT confirmed actively exploited in the wild - treat it as a demonstrated, weaponizable flaw rather than an observed campaign. The main thing that tempers real-world risk is reach, not difficulty: Elo is a niche no-code expression DSL, so the blast radius is limited by how few hosts run it, not by any exploitation hurdle. Net: a genuine high priority for anyone who embeds Elo (rule/config/form DSL, CI tooling, or the hosted playground), driven by act_now plus a demonstrated PoC plus a vendor-confirmed root cause and fix, with the caveat that widespread opportunistic exploitation is unproven absent EPSS/KEV data.

Exploit ScenarioDerived

An attacker crafts a plain Elo string using the ({}).constructor.constructor('...')() chain and gets it into any JavaScript-emission path - e.g. sharing an elo-lang.org/try/?code=...&run=1 link that auto-executes in the victim's browser after ~100ms (0-click XSS/session compromise), or feeding an attacker-controlled .elo file to bin/elo or a downstream service's defaultFormats.elo.parse() on a Node.js/CI host. The compiled output invokes a live Function(), running attacker-selected code in the host runtime (the advisory's PoC executes child_process and returns id output). A fully working PoC for all three entry points is published in the GHSA advisory.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Nov 03, 2026

Elo 1.0.0 and earlier - a purely functional expression language used as a rule-engine, config and form-builder DSL - lets an attacker who controls a plain Elo source string reach the JavaScript Function constructor and run arbitrary code in the host runtime. The vulnerable string can arrive through defaultFormats.elo.parse(), the bin/elo CLI (including the -f elo flag documented to pass user files as data), or the auto-running elo-lang.org/try?code=...&run=1 playground, where a shared link yields 0-click script execution and session compromise in the visitor's browser. The vendor advisory ships proof-of-concept payloads for all three entry points, and the issue is fixed in 1.0.1; no CISA KEV entry was provided in the source data, and the priority decision is act_now.

RemediationAI

Upgrade to Elo 1.0.1, the vendor-released patch that adds a FORBIDDEN_MEMBERS denylist in src/transform.ts rejecting constructor, __proto__, prototype, __defineGetter__, __defineSetter__, __lookupGetter__ and __lookupSetter__ on object, array and any-typed member access, with regression tests in test/unit/security.unit.test.ts covering the .constructor.constructor PoC across the library, CLI-equivalent and lambda paths (fix commits: https://github.com/enspirit/elo/commit/2136da1f64eec8ebf99890d3100be9394534b842 and https://github.com/enspirit/elo/commit/d2a89a8db76a244eb740687524a7e8529b7554b5; advisory: https://github.com/enspirit/elo/security/advisories/GHSA-33r5-xmm8-v6x5). Because the vulnerable code is reached from three separate sinks, updating the package is the only stated complete fix; organizations that cannot upgrade immediately should stop feeding untrusted Elo source into defaultFormats.elo.parse(), the bin/elo CLI and particularly the -f elo data-format flag, and should treat any Elo string from an untrusted source as executable code - the trade-off is that this removes the intended use case of parsing user-supplied DSL data. As an interim screen, reject member-access names matching the seven meta-properties before evaluation, noting that the check must be replicated at every call site rather than centralized in the transform stage as the patch does. Do not rely on the earlier AST-identifier regex as a guard: it accepts constructor.

Affected VersionsENISA

elo < 1.0.1

Affected Packages

euvd elo fix: 1.0.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Elo compiles an expression language through three stages: src/parser.ts (which accepts constructor and other JavaScript meta-property names as ordinary identifiers, so .constructor type-checks silently), src/transform.ts (whose member_access handler at lines ~144-158 permits member access on any, object and array types without filtering the property name - the single place a denylist could have been applied), and src/compilers/javascript.ts (which writes ${objectExpr}.${ir.property} verbatim into the emitted JavaScript). Chaining the surviving property gives ({}).constructor.constructor('...')(), which compiles to a live Function(...)() call in the realm of whichever sink evaluates the output. The CNA assigns CWE-79 (cross-site scripting) because one exposure is XSS on the playground, but the vendor advisory maps the same root cause to CWE-94 (code injection), CWE-693 (protection mechanism failure) and CWE-1336 (template engine injection); the effective class is an unsandboxed code-generation escape in a library assumed to be a safe data/DSL language. The CPE cpe:2.3:a:enspirit:elo covers the npm package across all versions prior to the fix. This plain-string path is distinct from the earlier Medium-severity AST-object injection report, whose identifier regex ^[a-zA-Z_][a-zA-Z0-9_]*$ still accepts constructor and which required an attacker-controlled AST object rather than a string.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 9.8 CRITICAL

A plain untrusted string to a parse/compile path yields unauthenticated code execution with no interaction (AV:N/AC:L/PR:N/UI:N) and full host compromise (C:H/I:H/A:H); no enforced sandbox boundary is crossed, so S:U.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Nov 03, 2026 - 19:18 EUVD
CVE Published
Nov 03, 2026 - 17:52 cve.org
CRITICAL 9.8

DescriptionCVE.org

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.

Technical POC Analysis

Bug class: CWE-79 as assigned, with the advisory also listing CWE-94/CWE-693/CWE-1336.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-44267 is a critical vulnerability in the Elo expression language (versions 1.0.0 and earlier) that permits arbitrary code execution when untrusted Elo source strings are processed. This affects any system using Elo as a rule engine or DSL, including CLI tools and web playgrounds, potentially leading to full host compromise or session hijacking. Leadership should prioritize immediate remediation because the vulnerability is trivially exploitable and proof-of-concept code is publicly available.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

Prevalence
Low
niche no-code expression DSL, limited npm adoption and small footprint
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Out-of-Cycle
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Very High

Priority Score

69
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +49
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy