ActiveSupport's safe_constantize builds an unescaped regular expression from the requested constant name, so untrusted input can crash a Rails server process through defects in Ruby's regex compiler. Action Cable passes the channel value of every subscribe command to this function before any lookup, so in a default Rails app an unauthenticated client can reach it at /cable and repeatedly knock the service offline. The CVSS is 7.5 (network, no privileges, availability only). There is no EPSS score, no KEV listing, no public exploit and no Nuclei template yet, although the advisory credits a researcher with a crashing proof of concept. The package has 6,440 downstream dependents, so the blast radius is wide, but its AI relevance is indirect: it matters only where Rails fronts AI/LLM APIs, chat, or streaming endpoints. Upgrade to activesupport 8.0.5.2 or 8.1.4.1, or apply the vendor patches. If you cannot patch yet, set config.action_cable.mount_path = nil when Action Cable is unused, or call reject_unauthorized_connection for unauthenticated clients.
What is the risk?
Overall risk is medium-high, driven by trivial network exploitation and no authentication requirement in default Action Cable configurations. Impact is limited to availability: there is no confidentiality or integrity loss. There is no known active exploitation, no KEV listing and no public exploit, though a crashing PoC exists in the advisory credits and exploitation is simple once the crafted pattern is known. Exposure is highest for internet-facing Rails apps that mount /cable and do not authenticate connections. The AI link is indirect, since this is a general Rails library flaw and not an AI-specific bug. Package risk score is 31/100, and the package has 98 other CVEs.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Anthropic Python | rubygems | >= 8.1.0.beta1, < 8.1.4.1 | 8.1.4.1 |
Do you use Anthropic Python? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade activesupport to 8.0.5.2 (8.0 line) or 8.1.4.1 (8.1 line), or apply the upstream patches: commit 210ac22d for 8.0 and 95aa9e41 for 8.1. 2) If Action Cable is unused, set config.action_cable.mount_path = nil to remove the endpoint. 3) If it is used, call reject_unauthorized_connection in ApplicationCable::Connection#connect for unauthenticated clients; this narrows exposure to authenticated users but does not remove it. 4) Rate-limit and WAF-filter WebSocket subscribe frames, and block channel names containing regex metacharacters at the edge. 5) Detection: monitor for repeated Rails worker crashes or restarts, and for unusual channel values in Action Cable subscribe logs. 6) Run process supervision with automatic restart and health checks to limit downtime. 7) Audit code paths that call safe_constantize with user input.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-126080?
ActiveSupport's safe_constantize builds an unescaped regular expression from the requested constant name, so untrusted input can crash a Rails server process through defects in Ruby's regex compiler. Action Cable passes the channel value of every subscribe command to this function before any lookup, so in a default Rails app an unauthenticated client can reach it at /cable and repeatedly knock the service offline. The CVSS is 7.5 (network, no privileges, availability only). There is no EPSS score, no KEV listing, no public exploit and no Nuclei template yet, although the advisory credits a researcher with a crashing proof of concept. The package has 6,440 downstream dependents, so the blast radius is wide, but its AI relevance is indirect: it matters only where Rails fronts AI/LLM APIs, chat, or streaming endpoints. Upgrade to activesupport 8.0.5.2 or 8.1.4.1, or apply the vendor patches. If you cannot patch yet, set config.action_cable.mount_path = nil when Action Cable is unused, or call reject_unauthorized_connection for unauthenticated clients.
Is CVE-2026-126080 actively exploited?
No confirmed active exploitation of CVE-2026-126080 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-126080?
1) Upgrade activesupport to 8.0.5.2 (8.0 line) or 8.1.4.1 (8.1 line), or apply the upstream patches: commit 210ac22d for 8.0 and 95aa9e41 for 8.1. 2) If Action Cable is unused, set config.action_cable.mount_path = nil to remove the endpoint. 3) If it is used, call reject_unauthorized_connection in ApplicationCable::Connection#connect for unauthenticated clients; this narrows exposure to authenticated users but does not remove it. 4) Rate-limit and WAF-filter WebSocket subscribe frames, and block channel names containing regex metacharacters at the edge. 5) Detection: monitor for repeated Rails worker crashes or restarts, and for unusual channel values in Action Cable subscribe logs. 6) Run process supervision with automatic restart and health checks to limit downtime. 7) Audit code paths that call safe_constantize with user input.
What systems are affected by CVE-2026-126080?
This vulnerability affects the following AI/ML architecture patterns: Rails-based LLM chat front ends, Real-time AI streaming gateways (WebSocket/Action Cable), Agent control dashboards, Model serving web front ends built on Rails.
What is the CVSS score for CVE-2026-126080?
CVE-2026-126080 has a CVSS v3.1 base score of 7.5 (HIGH). The EPSS exploitation probability is 0.83%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0029Denial of AI ServiceAML.T0049Exploit Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
### Impact When constant lookup raises `LoadError`, `ActiveSupport::Inflector#safe_constantize` (and `String#safe_constantize`) builds a regular expression from the requested constant name without escaping it, so a caller that passes untrusted input lets the attacker choose the source of a pattern that the application compiles. Crafted patterns can trigger defects in Ruby's regular expression compiler, possibly leading to a crash of the server process, and repeated requests could keep the application unavailable. Action Cable passes the `channel` value of each `subscribe` command to `safe_constantize` before any channel lookup, so in the default configuration an unauthenticated client of the Action Cable endpoint can reach this code. ### Details The check that decides whether `safe_constantize` returns `nil` or re-raises the `LoadError` now matches the first segment of the constant name against the error message as a literal string, and no longer compiles a regular expression. It returns the same result as before for constant names that contain no regular expression syntax. ### Affected applications An application is affected if it meets all of these requirements: - Mounts Action Cable, which a new Rails application does by default at `/cable` (`config.action_cable.mount_path`), or otherwise passes untrusted input to `safe_constantize`. - Accepts Action Cable connections from untrusted clients. `ApplicationCable::Connection#connect` authenticates nobody unless the application adds a check. ### Workarounds Applications that do not use Action Cable can set `config.action_cable.mount_path = nil` to remove the endpoint. Applications that use Action Cable can call `reject_unauthorized_connection` in `ApplicationCable::Connection#connect` for unauthenticated clients, which limits exposure to authenticated users but does not remove it. ### Releases The fixed releases are available at the normal locations. Patches for those who cannot upgrade at once: - 8.1: https://github.com/rails/rails/commit/95aa9e416016524956d4904fed96eaed079580bb.patch - 8.0: https://github.com/rails/rails/commit/210ac22d446c8e2625b091e79256806b836eee20.patch ### Versions affected - activesupport < 8.0.5.2 - activesupport >= 8.1, < 8.1.4.1 ### Credit This issue was responsibly reported by Felix Tscheulin ([flixt](https://hackerone.com/flixt)) through HackerOne researcher [scheja](https://hackerone.com/scheja), and independently by Bucky Wolfe ([Igneous](https://github.com/Igneous)), who provided a proof of concept that crashes the server. It was also found by the Anthropic OSS Scanner (ANT-2026-ZUN5KU3Q).
Exploitation Scenario
An attacker finds an internet-facing Rails application that serves an LLM chat or agent dashboard and exposes /cable. Without any authentication, they open a WebSocket connection and send a subscribe command whose channel value contains a crafted regular expression pattern. The server calls safe_constantize, the constant lookup raises LoadError, and the unescaped name is compiled into a regex that triggers a defect in Ruby's regex compiler and crashes the process. The attacker repeats the request in a loop, keeping the AI-facing application down despite automatic restarts.
Weaknesses (CWE)
CWE-74Improper Neutralization of Special Elements in Output Used by a Downstream ComponentPrimaryCWE-74Improper Neutralization of Special Elements in Output Used by a Downstream ComponentCWE-74 — Improper Neutralization of Special Elements in Output Used by a Downstream Component: The product constructs all or part of a command, data structure, or record using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify how it is parsed or interpreted when it is sent to a downstream component.
- [Requirements] Programming languages and supporting technologies might be chosen which are not subject to these issues.
- [Implementation] Utilize an appropriate mix of allowlist and denylist parsing to filter control-plane syntax from all input.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
- github.com/advisories/GHSA-8474-xrp6-wh69
- github.com/rails/rails/commit/210ac22d446c8e2625b091e79256806b836eee20
- github.com/rails/rails/commit/95aa9e416016524956d4904fed96eaed079580bb
- github.com/rails/rails/releases/tag/v8.0.5.2
- github.com/rails/rails/releases/tag/v8.1.4.1
- github.com/rails/rails/security/advisories/GHSA-8474-xrp6-wh69
- github.com/rubysec/ruby-advisory-db/blob/master/gems/activesupport/GHSA-8474-xrp6-wh69.yml
Timeline
Related Vulnerabilities
CVE-2026-9460310.0Podman: checkpoint images override sandbox on run
Same package: anthropicCVE-2026-466339.8Twig: single-quote escape flaw in {% use %} allows RCE
Same package: anthropicCVE-2026-544498.8LangBot: RCE via arbitrary STDIO MCP command
Same package: anthropicCVE-2026-277758.8Gitea: cached permission check allows repo takeover
Same package: anthropicCVE-2026-75748.7Claude Desktop: VM integrity bypass enables RCE
Same package: anthropic