Skip to main content

Elo EUVDEUVD-2026-116108

| CVE-2026-44265 HIGH
Improper Input Validation (CWE-20)
2026-11-03 GitHub_M GHSA-x9rp-7wh3-2rj5
7.4
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 value via untrusted JSON or plugin output
  2. Delivery
    Value populates programmatic AST node field
  3. Exploit
    Integrator compiles AST to JS/Ruby/Python/SQL backend
  4. Execution
    Emit stage interpolates value with no syntax validation
  5. Impact
    Arbitrary code execution or SQL injection in generated source

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Exploitation requires an integrator to use Elo's programmatic AST API and populate specific node fields - int_literal/float_literal .value, variable.name, member_access.property, object_literal keys, datapath segments, lambda.params[].name, or the SQL let-binding name - from untrusted or untyped sources (JSON-deserialized input, plugin output) and then compile to a backend, because the emit stage interpolates those values with no runtime syntax validation. JS/Ruby/Python targets yield arbitrary code execution; the SQL target yields SQL injection (undefined identifiers are intentionally emitted as column references). LIMITING FACTORS: this is not exploitable when the AST is built only from trusted or parser-produced input, the data flow is a non-default integration choice (hence AC:H), and this programmatic-AST path is distinct from the plain-string constructor-chain sandbox escape (GHSA #2). The only complete fix per the advisory is updating to 1.0.1, which adds validation at every backend emit site.

Impact

The source-supplied CVSS 3.1 vector (AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H, base 7.4) encodes the central tension: the impact is maximal (full C/I/A compromise via arbitrary code execution in JS/Ruby/Python targets and SQL injection in the SQL target), but exploitation is gated (AC:H) and not inherently network-exposed (AV:L) because the flaw lives in a library's programmatic AST API rather than a network listener. PR:N correctly reflects that the API performs no authentication of its own. No EPSS score and no CISA KEV entry are present in the input, so there is no signal of widespread or active exploitation; exploitation status rests on a public PoC reference in the GHSA advisory, not on observed attacks. The vuln.today decision label is 'this_week' (priority but not emergency/act_now), which is consistent with high technical impact plus an obscure, niche product and no exploitation evidence. The realistic risk is conditional, not universal: it is a genuine code-execution bug, but only for integrators who pipe untrusted/untyped data into the programmatic AST without validation - so it is a real priority for those specific deployments and lower real-world risk for consumers who only build ASTs from trusted/parsed Elo source. Note the AV:L vs. the description's 'JSON-deserialized input' mismatch: in many integrations the tainted data arrives remotely, so effective reachability can be higher than AV:L implies - verify against the actual integration.

Exploit ScenarioDerived

An integrator builds a no-code tool that deserializes attacker-supplied JSON into Elo's programmatic AST and compiles it to a backend. The attacker supplies a crafted int_literal value such as "(console.log('PWN'),1)" for JavaScript, "(system('touch /tmp/pwn'); 1)" for Ruby, or a variable.name like "1; DROP TABLE users; --" for SQL, which the emit stage interpolates verbatim into the generated source, yielding arbitrary code execution or SQL injection. The GHSA advisory embeds PoC snippets and references attached ast-exec.js/ast-exec2.js scripts that the reporter verified end-to-end at commit 749af7b, though exploitation still requires the AC:H precondition of an unsafe untrusted-to-AST data flow.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

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

Alert me

AnalysisAIv1 – Nov 03, 2026

Code injection in Elo's programmatic AST API (npm @enspirit/elo) through version 1.0.0 allows an integrator who populates AST node fields from JSON-deserialized input, plugin output, or other untyped sources to inject arbitrary expressions and identifiers into the JavaScript, Ruby, Python, or SQL emitted by the compiler, yielding arbitrary code execution on the JS/Ruby/Python backends and SQL injection on the SQL backend. The CVSS 3.1 vector (AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H, base 7.4) reflects maximum impact but a gated exploitation path: the flaw is reachable only when an application builds the AST itself rather than parsing plain Elo strings, and the advisory ships end-to-end proof-of-concept payloads that were verified against all four backends, though there is no CISA KEV entry and no confirmed active exploitation. It is a non-default integration choice, not a flaw in the parser, and is distinct from the earlier plain-string constructor-chain sandbox escape. Fixed in 1.0.1.

RemediationAI

Upgrade npm @enspirit/elo to version 1.0.1, which adds runtime validation at every backend emit site; the vendor advisory states that updating is the only complete fix, and the release is tagged in the changelog as [1.0.1] - 2026-04-20 referenced by commits d2a89a8db76a244eb740687524a7e8529b7554b5 and fb57dd37a2669d9c412454225c5b89a2adba5d93 (https://github.com/enspirit/elo/security/advisories/GHSA-x9rp-7wh3-2rj5). If upgrading is not immediately possible, treat every AST node field that reaches an emitter as untrusted: enforce strict typing and allowlisting before compilation - require int_literal/float_literal .value to be an actual number, require variable.name, member_access.property, lambda parameter names, object_literal keys, and SQL let-binding names to match a conservative identifier pattern, and reject datapath segments containing quotes, commas, backticks, or semicolons. The trade-off is that legitimate dynamic expressions constructed programmatically will be rejected or require escaping, and this filter must be duplicated in every integration that builds ASTs, so it is a stopgap rather than a durable fix. Do not confuse this with the 0.9.7 date/datetime/duration mitigation or with the parser-level constructor-chain issue, neither of which covers these AST-object sinks.

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 is a purely functional expression language used by no-code tools that compiles expressions to JavaScript, Ruby, Python, and SQL. Its AST is described in TypeScript, but the type signatures are erased at runtime, so node fields such as int_literal/float_literal .value, variable.name, member_access.property, object_literal keys, datapath segments, lambda.params[].name, and the SQL let-binding name are never checked before each backend's emit stage interpolates them verbatim into generated source. The root cause is improper input validation (CWE-20), with concrete consequences spanning SQL injection (CWE-89) and code injection (CWE-94) through an exposed, unvalidated compile-time API (CWE-749). The advisory counts at least 23 emission sites across six node-field categories and four backends. The SQL backend is especially exposed because undefined identifiers are intentionally emitted as column references, so a crafted variable.name such as "1; DROP TABLE users; --" lands directly in the query text; the Ruby backend additionally allows backtick shell execution via datapath segments. A narrower variant of the same class was previously addressed in 0.9.7, which wrapped date/datetime/duration literal emitters in JSON.stringify(); 1.0.1 generalizes that treatment by adding runtime validation at every backend emit site. This path is separate from the plain-string constructor-chain sandbox escape (GHSA #2): the parser's identifier regex accepts names like 'constructor', whereas here the AST itself is the injection vector.

Know when JavaScript 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 7.4 HIGH
AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.4 HIGH

AC:H because exploitation needs a specific unsafe integration feeding untrusted data to the AST; AV:L as the library exposes no network listener itself; PR:N as the API authenticates nothing; C/I/A:H from full code execution.

3.1 AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/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
Local
Attack Complexity
High
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:47 cve.org
HIGH 7.4

DescriptionCVE.org

Elo is a purely functional expression language for no-code tools. Prior to 1.0.1, Elo's programmatic AST API accepts arbitrary values from JSON-deserialized input, plugin output, or other untyped sources and interpolates them into generated JavaScript, Ruby, Python, or SQL without runtime syntax validation. The affected fields are int_literal / float_literal .value, variable.name, member_access.property, object_literal keys, datapath segments, lambda.params[].name, and the SQL let binding name. Crafted values become executable expressions or identifiers, allowing arbitrary code execution in JavaScript, Ruby, and Python targets and SQL injection in the SQL target. This programmatic AST-object path is distinct from the plain-string constructor-chain sandbox escape. This issue is fixed in version 1.0.1.

Technical POC Analysis

CWE-20 (Improper Input Validation), with the advisory also mapping CWE-89, CWE-94 and CWE-749.

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-44265 is a high-severity code injection vulnerability in the Elo npm package (@enspirit/elo) version 1.0.0, enabling arbitrary code execution on JavaScript, Ruby, and Python backends, and SQL injection on the SQL backend, for applications that construct AST nodes from untyped sources. This impacts development teams and services relying on Elo's programmatic AST API, particularly those aggregating JSON or plugin data, and could lead to full system compromise on all four backends. Leadership should prioritize patching to version 1.0.1 and auditing integration patterns to prevent potential exploitation.

Business Impact: High
Compensating Controls

Apply vendor patch: version 1.0.1 is available and fixes the vulnerability.

Threat Intelligence Overview

Prevalence
Rare
obscure no-code expression library, tiny npm (@enspirit/elo) footprint
Threat Intel
1
1 source
Social Media
2
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 HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
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
Scheduled
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
High

Priority Score

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

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

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

CVE-2026-102827 CRITICAL POC
9.8 Sep 29

Command injection in simple-git, the Node.js library for running git commands and published on npm, affects all releases

CVE-2026-77615 HIGH POC
8.7 Sep 17

Stored DOM-based cross-site scripting in Paella Player's closed-caption rendering path (paella-core before 2.12.11) allo

CVE-2026-92776 HIGH POC
8.6 Sep 16

Authorization bypass in Wiki.js through 2.5.314 allows an authenticated user who has been granted access to at least one

CVE-2026-102826 HIGH POC
8.1 Sep 29

Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command

CVE-2026-85715 HIGH POC
7.5 Sep 17

Improper memory allocation control in ExifReader before 4.41.1 allows remote attackers to exhaust heap memory and termin

CVE-2026-102278 HIGH POC
7.5 Sep 28

Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a

CVE-2026-102276 HIGH POC
7.5 Sep 28

Stack exhaustion in the npm library brace-expansion (all versions prior to 1.1.19, 2.1.5, 3.0.7, and 5.0.10) lets a craf

CVE-2026-92775 HIGH POC
7.1 Sep 16

Server-side request forgery in Wiki.js through 2.5.314 lets an authenticated user who holds page-editing permissions for

CVE-2026-101910 MEDIUM POC
6.9 Sep 28

The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat

CVE-2026-101914 MEDIUM POC
6.5 Sep 28

Authorization bypass in the @grpc/grpc-js-xds package (the xDS/RBAC extension for @grpc/grpc-js) lets a request for one

CVE-2026-101912 MEDIUM POC
6.3 Sep 28

Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo

CVE-2026-101911 MEDIUM POC
6.3 Sep 28

Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or

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