Skip to main content

ruby_llm EUVDEUVD-2026-91753

| CVE-2026-67989 HIGH
Inefficient Regular Expression Complexity (ReDoS) (CWE-1333)
2026-10-02 mitre GHSA-57hg-jgw4-wcqw
7.5
CVSS 3.1 · Vendor: mitre
View

Attack ChainAIDerived

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

  1. Access
    Identify app accepting model-id input
  2. Delivery
    Submit crafted 'voxtral'-repeating model id
  3. Exploit
    Trigger polynomial regex backtracking in capability match
  4. Execution
    Exhaust CPU / stall worker thread
  5. Impact
    Denial of service

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V2 - Validation and Business Logic Regex complexity limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

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

Exploitation Conditions

Requires that the host application using ruby_llm routes untrusted, attacker-influenced model-identifier strings into the Mistral provider's modalities_for/capabilities_for code path, which applies the vulnerable /voxtral.*tts/ and /voxtral.*transcribe/ regexes. Additionally the process must run on Ruby 3.1.x, where the regex engine lacks the linear-time ReDoS optimization - the description explicitly limits the condition to Ruby 3.1.x, so deployments on later Ruby versions are a strong limiting factor. No authentication is enforced by the library itself, but the practical limiter is whether model selection is exposed to untrusted input at all; many deployments hardcode or whitelist model ids, which neutralizes the vector. Impact is availability-only CPU exhaustion; no data confidentiality or integrity effect.

Impact

This is a polynomial-time ReDoS (CWE-1333) in the crmne/ruby_llm gem's Mistral capability matching, affecting availability only (CVSS:3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5, confirmed in input). The signals point to real-but-conditional risk rather than an urgent crisis. SSVC states Exploitation: none (no observed exploitation) and Technical Impact: partial, but Automatable: yes - meaning that where the preconditions exist, an attacker can script the trigger reliably. No EPSS score, KEV listing, or POC was provided, so exploitation status is 'no public exploit identified at time of analysis.' A key tension: the CVSS vector claims network, unauthenticated reach (AV:N/PR:N), but this is a LIBRARY vulnerability - the vulnerable code only executes if the consuming application passes attacker-controllable model-id strings into modalities_for/capabilities_for, AND the runtime is Ruby 3.1.x (the description explicitly scopes the condition to Ruby 3.1.x; later Ruby regex engines with the linear-time ReDoS mitigations are not affected). So the headline AV:N/PR:N reflects the worst-case integration, not a universal truth - verify whether your application exposes model selection to untrusted input. Because the pattern is polynomial (not exponential/catastrophic), the impact is CPU exhaustion/thread stalling proportional to a large crafted input, degrading or hanging a worker rather than instantly crashing it.

Exploit ScenarioDerived

An application built on ruby_llm (running Ruby 3.1.x) lets users specify or influence the Mistral model identifier. An attacker submits a model id such as a very long repetition of 'voxtral' (the fix test uses 'voxtral' * 50,000), causing the /voxtral.*tts/ and /voxtral.*transcribe/ regexes to consume excessive CPU and stall the request thread, degrading service availability. No public exploit is identified, but the trigger is trivial to reproduce and SSVC marks it Automatable: yes.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 02, 2026

Polynomial-time regular expression denial of service (CWE-1333) in the crmne/ruby_llm Ruby gem's Mistral provider capability matching allows unauthenticated remote attackers to exhaust CPU and stall requests by feeding a crafted model-identifier string into the modalities_for/capabilities_for code path, but only on hosts running Ruby 3.1.x, whose regex engine lacks the linear-time matching optimization. Availability is the sole impacted property (CVSS:3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5), and the practical limiter is deployment context: the host application must route untrusted, attacker-influenced model IDs into this matching logic, since hardcoded or whitelisted model IDs neutralize the vector. CISA SSVC records Exploitation: none and there is no public exploit identified at time of analysis; an upstream fix exists in commit dd3c84812598def03d4aff77b5447c41d8f5c34e.

RemediationAI

Upgrade to the upstream fix: commit dd3c84812598def03d4aff77b5447c41d8f5c34e in crmne/ruby_llm (https://github.com/crmne/ruby_llm/commit/dd3c84812598def03d4aff77b5447c41d8f5c34e), which replaces the vulnerable /voxtral.*tts/ and /voxtral.*transcribe/ regexes with a String#index-based voxtral_followed_by? helper and adds a regression spec proving the pathological input completes within a timeout; since this is a commit rather than a confirmed tagged release, pin the Gemfile to that revision or a later release containing it, and track the project at https://github.com/crmne/ruby_llm for an official version bump. If upgrading is not immediately possible, the highest-value compensating control is to run on Ruby 3.2 or later, where linear-time regex matching removes the amplification - at the cost of a potentially disruptive runtime upgrade, noting that this also changes other engine behavior. Second, validate and constrain model identifiers before they reach the Mistral provider: whitelist known model IDs or reject inputs that are not short, well-formed identifiers (a modest length cap such as 100 characters defeats the repeated-'voxtral' payload), accepting the trade-off that dynamic or user-supplied model discovery ceases to work and that legitimate new model IDs need config updates; normalizing/stripping repeated substrings is a weaker alternative since it can mangle valid identifiers. Third, if neither is feasible, enforce request timeouts and per-request concurrency limits at the application or reverse-proxy layer to bound CPU consumption per call, recognizing this only limits blast radius rather than removing the hot loop. No vendor-released patch version is independently confirmed beyond the referenced commit, and there is no public exploit identified at time of analysis, so prioritization can be scheduled rather than emergency - but do not treat absence of exploit code as a reason to skip the whitelist/length-cap mitigation in exposed deployments.

Affected VersionsENISA

n/a n/a

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

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

Technical ContextAI · show details

The root cause class is CWE-1333 (Inefficient Regular Expression Complexity). In lib/ruby_llm/providers/mistral/capabilities.rb at commit fa6f279847d6d7027814539d9c0dfc3bbdfd2a83, model capability resolution for Mistral models applied regular expressions such as /voxtral.*tts/ and /voxtral.*transcribe/ (line 92 in the referenced blob) to a caller-supplied model identifier, and further chained match? calls for moderation, ocr, embed, fine-tuning and distillation markers. On Ruby 3.1.x the underlying Onigmo regex engine performs backtracking without the memoization/linear-time matching optimization later added in Ruby 3.2, so an identifier built from many repetitions of the literal 'voxtral' followed by a non-matching suffix drives superlinear backtracking and burns CPU. The upstream commit dd3c84812598def03d4aff77b5447c41d8f5c34e removes the ambiguous regexes in favor of a constant-time helper voxtral_followed_by?(model_id, marker) that locates VOXTRAL with String#index and then searches for the marker using index with an explicit offset, eliminating backtracking entirely; the accompanying spec adds a regression test asserting that modalities_for("#{'voxtral' * 50_000}-nope") completes within a 5-second timeout. Note that no CPE is assigned for this CVE (the supplied CPE is the placeholder cpe:2.3:a:n/a:n/a) and EUVD likewise lists affected versions as "n/a n/a", so version scoping must rely on the pinned commit and the Ruby 3.1.x runtime constraint rather than scanner-grade identifiers.

Know when Ruby 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 (mitre) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

A single crafted model-id string triggers the DoS with low complexity and no library-enforced auth (AV:N/AC:L/PR:N); impact is availability-only (A:H, C/I:N), though reach is gated by app exposure and Ruby 3.1.x.

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

Primary rating from Vendor (mitre).

CVSS VectorVendor: mitre

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

Lifecycle Timeline

2
CVE Published
Oct 02, 2026 - 00:00 cve.org
HIGH 7.5
CVE Published
Oct 02, 2026 - 00:00 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

crmne/ruby_llm at commit fa6f279847d6d7027814539d9c0dfc3bbdfd2a83 contains a polynomial-time regular expression denial-of-service condition in Mistral model capability matching on Ruby 3.1.x

Executive ViewAI

Why It Matters

The crmne/ruby_llm Ruby gem's Mistral provider contains a high-severity denial-of-service vulnerability (CVE-2026-67989) that allows unauthenticated remote attackers to exhaust CPU and stall requests by supplying crafted model-identifier strings. Organizations running this gem on Ruby 3.1.x and routing untrusted model IDs into the affected matching logic are at risk of service unavailability. Leadership should prioritize mitigation because a successful attack could degrade or halt dependent applications, though no public exploit identified at time of analysis.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: upgrade Ruby to 3.2+ (linear-time regex engine), apply upstream commit dd3c84812598def03d4aff77b5447c41d8f5c34e to the gem, strictly allowlist model identifiers, limit model ID string length, or disable the Mistral provider if not required.

Threat Intelligence Overview

EPSS Score
0.3%
Top 75% exploitable
Prevalence
Low
niche open-source Ruby LLM client gem, limited production footprint
Data Quality
5 sources
Confidence: Medium

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 0.3%
Patch available No
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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Ruby

View all
CVE-2017-17405 HIGH POC
8.8 Dec 15

Ruby before 2.4.3 allows Net::FTP command injection. Rated high severity (CVSS 8.8), this vulnerability is remotely expl

CVE-2017-17790 CRITICAL POC
9.8 Dec 20

The lazy_initialize function in lib/resolv.rb in Ruby through 2.4.3 uses Kernel#open, which might allow Command Injectio

CVE-2017-14064 CRITICAL POC
9.8 Aug 31

Ruby through 2.2.7, 2.3.x through 2.3.4, and 2.4.x through 2.4.1 can expose arbitrary memory during a JSON.generate call

CVE-2016-2336 CRITICAL POC
9.8 Jan 06

Type confusion exists in two methods of Ruby's WIN32OLE class, ole_invoke and ole_query_interface. Rated critical severi

CVE-2026-77602 CRITICAL POC
9.9 Sep 23

Authenticated remote code execution in OpenC3 COSMOS (Ruby gem 'openc3' versions 5.1.0 through 7.2.1) lets any logged-in

CVE-2016-2337 CRITICAL POC
9.8 Jan 06

Type confusion exists in _cancel_eval Ruby's TclTkIp class method. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2016-2339 CRITICAL POC
9.8 Jan 06

An exploitable heap overflow vulnerability exists in the Fiddle::Function.new "initialize" function functionality of Rub

CVE-2017-9225 CRITICAL POC
9.8 May 24

An issue was discovered in Oniguruma 6.2.0, as used in Oniguruma-mod in Ruby through 2.4.1 and mbstring in PHP through 7

CVE-2026-27614 CRITICAL POC
9.3 Feb 25

Stored XSS in Bugsink error tracking tool before 2.0.13 allows unauthenticated attackers to inject persistent scripts th

CVE-2017-0898 CRITICAL POC
9.1 Sep 15

Ruby before 2.4.2, 2.3.5, and 2.2.8 is vulnerable to a malicious format string which contains a precious specifier (*) w

CVE-2013-4164 MEDIUM POC
6.8 Nov 23

Heap-based buffer overflow in Ruby 1.8, 1.9 before 1.9.3-p484, 2.0 before 2.0.0-p353, 2.1 before 2.1.0 preview2, and tru

CVE-2026-71847 HIGH POC
8.7 Aug 07

Heap-use-after-free in the Ruby json gem's native C extension (versions 2.20.0 through 2.21.1) allows an unauthenticated

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