Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted value via untrusted JSON or plugin output
-
DeliveryValue populates programmatic AST node field
-
ExploitIntegrator compiles AST to JS/Ruby/Python/SQL backend
-
ExecutionEmit stage interpolates value with no syntax validation
-
ImpactArbitrary 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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.
Executive ViewAI
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.
Apply vendor patch: version 1.0.1 is available and fixes the vulnerability.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
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.
More in JavaScript
View allCommand injection in simple-git, the Node.js library for running git commands and published on npm, affects all releases
Stored DOM-based cross-site scripting in Paella Player's closed-caption rendering path (paella-core before 2.12.11) allo
Authorization bypass in Wiki.js through 2.5.314 allows an authenticated user who has been granted access to at least one
Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command
Improper memory allocation control in ExifReader before 4.41.1 allows remote attackers to exhaust heap memory and termin
Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a
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
Server-side request forgery in Wiki.js through 2.5.314 lets an authenticated user who holds page-editing permissions for
The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat
Authorization bypass in the @grpc/grpc-js-xds package (the xDS/RBAC extension for @grpc/grpc-js) lets a request for one
Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo
Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or
EUVD-2026-116108
GHSA-x9rp-7wh3-2rj5
NVD
CVE.org
Exploit-DB