CRITICALCVSS v3.1 9.8Vulnerability

CVE-2026-44266

### Summary Elo's Ruby backend emits attacker-controlled text into Ruby double-quoted strings without escaping the `#` character. Because `#` begins Ruby's interpolation sequences — `#{expr}`, `#@ivar`, `#@@cvar`, `#$gvar` — and any expression wrapped in `#{...}` may use backticks for shell execution, an Elo program that contains a crafted string literal or a labelled subtype constraint compiles to Ruby that evaluates attacker-chosen Ruby, and through backticks runs attacker-chosen shell commands, at runtime. The same Elo source compiled to JavaScript, Python, or SQL is benign, so the bug also breaks the cross-target portability guarantee the rest of the compiler honours. ### Vulnerable sinks Two sinks exist in `src/compilers/ruby.ts` at commit `749af7b`: 1. **String-literal emitter — lines 180–184.** The emitter escapes backslash, double quote, and control characters, but not `#`. Any `#{...}` sequence in an Elo string literal flows straight into the emitted Ruby source. 2. **Labelled subtype-constraint branch — lines 405–412.** The error message passed to `p_fail(p, "...")` is wrapped in a Ruby double-quoted string with no escape pass at all. Because the parser at `src/parser.ts:1339–1348` accepts single-quoted Elo strings as constraint labels, a label such as `'#{` `` `id` `` `}'` flows unchanged into the emitted Ruby. ### Attack surfaces All three surfaces share the same root cause (the missing `#` escape in the Ruby double-quoted-string emission path) and are addressed by the same patch: | # | Entry point | Threat model | |---|---|---| | 1 | `/try` playground on elo-lang.org (Ruby target) | 0-click server-side RCE against elo-lang.org infrastructure from a shared PoC URL | | 2 | `bin/eloc -t ruby -x` on a CI or DevOps host | RCE on any host that passes Elo strings through the CLI | | 3 | Library API — `defaultFormats.elo.parse()` with a Ruby emission step | Ruby RCE for any downstream integrator using Elo as a rule engine, configuration DSL, or f

Properties

Cvss score
9.8
First seen
2026-11-03T17:51:30+00:00
Last seen
2026-11-03T17:51:30+00:00
Euvd assigner
GitHub_M
Retrieved at
2026-11-03T21:26:50+00:00
Src batch id
euvd-20261103T193401Z-8f3acf
Source url
https://github.com/advisories/GHSA-7w38-ggh5-v542
Ghsa updated
2026-11-03T17:51:30Z
Score
9.8
Euvd base score version
3.1
Fetched at
2026-11-03T19:34:20+00:00
Euvd vendor
enspirit
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
First seen by Signal
2026-11-03T19:34:21+00:00
Euvd base score
9.8
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Content hash
cd47ec0c7a43c87a57aa001ae9680556aabf7b688b9060810dacf3933227d412
Published at
2026-11-03T18:18:02.957
Last modified
2026-11-03T20:18:13.823

Related Entities (5)

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-44266 (CVSS v3.1 9.8) — Ninja Signal Threat Intelligence | Ninja Signal