GHSA-x9rp-7wh3-2rj5: Elo backends have code injection via unvalidated emission of programmatic AST fields

  • Severity: HIGH
  • CVE: CVE-2026-44265
  • Ecosystems: npm
  • Packages: @enspirit/elo

### Summary

Elo’s programmatic AST API accepts arbitrary values in many node fields without runtime type or syntax validation. Each backend’s emit stage interpolates those values straight into the generated source with no escape pass. An integrator that populates the AST from JSON-deserialised input, plugin output, or any other untyped source therefore exposes a code-injection primitive that flows through to the emitted JavaScript, Ruby, Python, or SQL.

The same pattern was previously addressed in **0.9.7 (2026-01-27)**, which patched the date/datetime/duration literal emitters via `JSON.stringify()` after a report by **naoyashiga**. This advisory generalises that fix to the remaining AST surface — at least 23 emission sites across six node-field categories and four backends.

### Vulnerable sinks

Each row is a category of sinks that share the same shape: TypeScript signature erased at runtime → AST-API consumer passes a crafted value → emit interpolates the value verbatim.

| # | AST field | Affected backends | Resulting injection |
|—|—|—|—|
| 1 | `int_literal` / `float_literal` `.value` | JS, Ruby, Python, SQL | Arbitrary expression in the emitted numeric position (RCE on JS/Ruby/Python; SQL expression injection) |
| 2 | `variable.name` | JS, Ruby, Python, SQL | Identifier-position injection; on SQL, raw SQL injection because undefined identifiers are intentionally emitted as column references |
| 3 | `member_access.property` | JS, Ruby, Python, SQL | Property a…

Source: GitHub Security Advisories · 2026-11-03