CVE-2026-33169
Medium · 5.3CVSS
5.3
EPSS
0.7%
Published
Mar 24, 2026
CISA due date
—
Cloudanix analysis
A flaw in some Rails applications can let someone slow down or disrupt the service by sending extremely long numbers to pages or APIs that format them.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
CVE-2026-33169 is a denial-of-service weakness in Active Support, the Ruby on Rails support library. The vulnerable NumberToDelimitedConverter implementation uses a repeated lookahead regular expression with gsub! to insert thousands delimiters into numeric strings. When processing very long digit strings, the regular-expression behavior can become quadratic, causing excessive CPU consumption and request-processing delays. The flaw is remotely triggerable when an application passes attacker-controlled or untrusted long numeric strings into affected number-formatting code such as Rails number delimiter helpers. It does not directly allow data theft, privilege escalation, or code execution, but it can reduce application availability.
Why it matters to the business
An attacker may be able to degrade or intermittently disrupt Rails-backed services by sending crafted requests containing unusually long numeric values that are later formatted by vulnerable Active Support code. The likely outcome is elevated CPU usage, slow responses, worker exhaustion, failed requests, autoscaling cost increases, and potential partial outage of affected application functions. The CVSS score is moderate and EPSS is currently low, and it is not listed in CISA KEV or known ransomware use, but internet-facing Rails applications that format user-supplied numeric input should still prioritize remediation because exploitation requires no authentication or user interaction if a reachable endpoint exercises the vulnerable code path.
How an attack unfolds
An attacker first identifies a Rails application endpoint that accepts numeric-looking input and later formats that value with Active Support delimiter functionality. Examples may include reporting, search, pricing, billing, analytics, import, or API endpoints that normalize or display large numbers. The attacker then submits a request containing an extremely long sequence of digits. When the application passes that string into the vulnerable NumberToDelimitedConverter path, the lookahead-based regular expression repeatedly evaluates portions of the input while gsub! performs substitutions, producing disproportionately high CPU cost as input length grows. By repeating these requests or sending them concurrently, the attacker can tie up application workers, increase latency, trigger timeouts, and reduce availability for legitimate users.
How to fix it
Upgrade Active Support/Rails to a patched release. The patched versions identified for this issue are Active Support/Rails 8.1.2.1, 8.0.4.1, and 7.2.3.1. Applications using affected Rails branches should update the rails and activesupport gems to the appropriate fixed version for their branch, then rebuild, redeploy, and restart application processes. If immediate upgrade is not possible, apply compensating controls: enforce strict maximum length limits for numeric request parameters before formatting, reject unreasonably long digit strings at the controller/API boundary, add request body and parameter size limits at the application and reverse-proxy layers, and ensure request timeouts and worker limits are configured to prevent a small number of expensive requests from monopolizing capacity. Avoid passing raw untrusted strings into number delimiter helpers without validation and length constraints.
How to confirm the fix worked
Confirm that dependency resolution uses a patched Active Support version: 8.1.2.1, 8.0.4.1, 7.2.3.1, or later applicable patched release. Check Gemfile.lock, package inventory, container images, and deployed runtime versions for activesupport and rails. Run application tests that exercise number delimiter formatting with normal inputs to verify functional compatibility. For exposure validation, review code for use of ActiveSupport::NumberHelper, number_to_delimited, or related number-formatting helpers on user-controlled values. Safely test non-production environments with long digit strings to confirm requests are rejected quickly by validation or handled without abnormal CPU spikes. In production, verify that input length limits, request size limits, timeouts, and monitoring alerts are in place.
Typical attack path
- Identify a Rails or Active Support-based application endpoint that accepts numeric input from a request body, query parameter, form field, uploaded data, or API payload.
- Determine whether the endpoint formats numbers using Active Support/Rails delimiter helpers, directly or indirectly.
- Send a crafted request containing an unusually long digit-only string or very large numeric-looking value.
- Cause the vulnerable NumberToDelimitedConverter regular expression and gsub! interaction to consume excessive CPU time.
- Repeat the request or run concurrent requests to exhaust application workers or CPU capacity.
- Observe degraded response times, request timeouts, increased error rates, or service unavailability.
How to detect it
To determine whether exploitation was attempted or successful, review application access logs, API gateway logs, reverse-proxy logs, Rails production logs, APM traces, WAF events, and infrastructure CPU metrics. Look for requests with query strings, JSON fields, form fields, or uploaded content containing unusually long digit-only values, especially when followed by elevated response times, 408/499/500/502/503/504 errors, application worker timeouts, or CPU saturation. Correlate suspicious requests with endpoints known to call ActiveSupport::NumberHelper, number_to_delimited, or number formatting in views, serializers, reports, exports, or API responses. In Rails logs and APM data, investigate slow transactions where stack traces, spans, or method names reference ActiveSupport::NumberHelper::NumberToDelimitedConverter or number_to_delimited. Also look for repeated requests from the same source IPs, user agents, API clients, or autonomous systems that submit very large numeric parameters and cause disproportionate processing time. There are no known malware artifacts or fixed network indicators for this vulnerability; detection should focus on behavioral evidence of long numeric payloads causing CPU-bound slow requests.
- ActiveSupport::NumberHelper::NumberToDelimitedConverter
- number_to_delimited
- NumberToDelimitedConverter
- ActiveSupport::NumberHelper
- ActionController::Live::ClientDisconnected
- Rack::Timeout::RequestTimeoutException
- Net::ReadTimeout
- execution expired
- Request ran for longer than
- Completed 500
- Completed 503
- Completed 504
- Started GET
- Started POST
What your security team should do
- Inventory Rails applications and services that include vulnerable activesupport or rails versions prior to 8.1.2.1, 8.0.4.1, and 7.2.3.1.
- Prioritize internet-facing applications and APIs that accept numeric parameters, file imports, report filters, analytics inputs, billing values, or other user-controlled data likely to be formatted as numbers.
- Upgrade affected applications to the patched Rails/Active Support release for their branch and redeploy all runtime artifacts, including containers and serverless packages.
- Add or verify maximum length validation for numeric inputs before any formatting or conversion logic is invoked.
- Configure reverse proxies, application servers, and frameworks with conservative request body limits, header/query limits, request timeouts, and worker recycling where appropriate.
- Add monitoring for sudden increases in CPU usage, request latency, timeout errors, and repeated requests containing unusually long digit sequences.
- Review logs from the period since publication on 2026-03-24 for signs of probing or repeated long numeric payloads against endpoints that perform number formatting.
- Because exploit maturity is currently reported as none and EPSS is low, treat this as a focused availability-risk patching item rather than an emergency response unless exposed code paths or active anomalies are identified.
The record
Active Support is a toolkit of support libraries and Ruby core extensions extracted from the Rails framework. `NumberToDelimitedConverter` uses a lookahead-based regular expression with `gsub!` to insert thousands delimiters. Prior to versions 8.1.2.1, 8.0.4.1, and 7.2.3.1, the interaction between the repeated lookahead group and `gsub!` can produce quadratic time complexity on long digit strings. Versions 8.1.2.1, 8.0.4.1, and 7.2.3.1 contain a patch.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Chainguard | cinc-auditor | 0 | 7.0.107-r1 |
| Chainguard | kube-fluentd-operator | 0 | 1.18.2-r60 |
| Chainguard | kube-logging-operator-fluentd-outputs | 0 | 6.4.0-r9 |
| Chainguard | ruby3.2-rails-8.1 | 0 | 8.1.3-r0 |
| Chainguard | ruby3.4-rails-8.0 | 0 | 8.0.5-r0 |
| Wolfi | cinc-auditor | 0 | 7.0.107-r1 |
| Wolfi | kube-fluentd-operator | 0 | 1.18.2-r60 |
| Wolfi | kube-logging-operator-fluentd-outputs | 0 | 6.4.0-r9 |
| Wolfi | ruby3.2-rails-8.1 | 0 | 8.1.3-r0 |
| Wolfi | ruby3.4-rails-8.0 | 0 | 8.0.5-r0 |
Related vulnerabilities
- CVE-2026-33170 Active Support is a toolkit of support libraries and Ruby core extensions extracted from… Also affects cinc-auditor
- CVE-2026-33176 Active Support is a toolkit of support libraries and Ruby core extensions extracted from… Also affects cinc-auditor
- CVE-2026-33210 Ruby JSON is a JSON implementation for Ruby. Also affects cinc-auditor
- CVE-2026-25765 Faraday is an HTTP client library abstraction layer that provides a common interface over… Also affects cinc-auditor
- CVE-2026-25500 Rack is a modular Ruby web server interface. Also affects kube-fluentd-operator
- CVE-2025-14762 Missing cryptographic key commitment in the AWS SDK for Ruby may allow a user with write… Also affects kube-fluentd-operator
- CVE-2025-65637 Logrus is vulnerable to DoS when using Entry.Writer() Also affects kube-fluentd-operator
- CVE-2025-61919 Rack is vulnerable to a memory-exhaustion DoS through unbounded URL-encoded body parsing Also affects kube-fluentd-operator