Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app accepting model-id input
-
DeliverySubmit crafted 'voxtral'-repeating model id
-
ExploitTrigger polynomial regex backtracking in capability match
-
ExecutionExhaust CPU / stall worker thread
-
ImpactDenial 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
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.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Ruby before 2.4.3 allows Net::FTP command injection. Rated high severity (CVSS 8.8), this vulnerability is remotely expl
The lazy_initialize function in lib/resolv.rb in Ruby through 2.4.3 uses Kernel#open, which might allow Command Injectio
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
Type confusion exists in two methods of Ruby's WIN32OLE class, ole_invoke and ole_query_interface. Rated critical severi
Authenticated remote code execution in OpenC3 COSMOS (Ruby gem 'openc3' versions 5.1.0 through 7.2.1) lets any logged-in
Type confusion exists in _cancel_eval Ruby's TclTkIp class method. Rated critical severity (CVSS 9.8), this vulnerabilit
An exploitable heap overflow vulnerability exists in the Fiddle::Function.new "initialize" function functionality of Rub
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
Stored XSS in Bugsink error tracking tool before 2.0.13 allows unauthenticated attackers to inject persistent scripts th
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
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
Heap-use-after-free in the Ruby json gem's native C extension (versions 2.20.0 through 2.21.1) allows an unauthenticated
EUVD-2026-91753
GHSA-57hg-jgw4-wcqw
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB