CVE-2026-34826
Denial of Service via Unrestricted Byte Range Parsing in Rack
Publication date: 2026-04-02
Last updated on: 2026-04-16
Assigner: GitHub, Inc.
Description
Description
CVSS Scores
EPSS Scores
| Probability: | |
| Percentile: |
Meta Information
Affected Vendors & Products
| Vendor | Product | Version / Range |
|---|---|---|
| rack | rack | From 3.0.0 (inc) to 3.1.21 (exc) |
| rack | rack | From 3.2.0 (inc) to 3.2.6 (exc) |
| rack | rack | to 2.2.23 (exc) |
Helpful Resources
Exploitability
| CWE ID | Description |
|---|---|
| CWE-400 | The product does not properly control the allocation and maintenance of a limited resource. |
| CWE-770 | The product allocates a reusable resource or group of resources on behalf of an actor without imposing any intended restrictions on the size or number of resources that can be allocated. |
Attack-Flow Graph
AI Powered Q&A
How does this vulnerability affect compliance with common standards and regulations (like GDPR, HIPAA)?:
This vulnerability causes a denial of service condition by allowing an attacker to trigger excessive resource consumption on affected Rack versions. While it impacts availability, it does not affect confidentiality or integrity of data.
Because the vulnerability does not lead to unauthorized data access or modification, it does not directly violate data protection requirements under standards like GDPR or HIPAA. However, the resulting denial of service could impact system availability, which is a component of these regulations' security requirements.
Organizations relying on affected Rack versions should consider the availability impact when assessing compliance, as prolonged denial of service could affect service continuity obligations.
Can you explain this vulnerability to me?
CVE-2026-34826 is a moderate severity denial of service vulnerability in the RubyGems package "rack." It affects versions prior to 2.2.23, versions from 3.0 up to but not including 3.1.21, and versions from 3.2 up to but not including 3.2.6.
The vulnerability exists in the Rack::Utils.get_byte_ranges method, which parses the HTTP Range header for multipart byte range requests without limiting the number of individual byte ranges accepted.
Although a previous fix addressed the total byte coverage exceeding the file size, it did not restrict the count of byte ranges. An attacker can exploit this by sending a Range header with many small, overlapping byte ranges (e.g., "Range: bytes=0-0,0-0,0-0,...").
This causes excessive CPU, memory, I/O, and bandwidth consumption due to repeated multipart response generation, per-range iteration, file seek and read operations, and temporary string allocations, leading to denial of service.
How can this vulnerability impact me? :
This vulnerability allows an unauthenticated attacker to cause disproportionate resource usage on a server running vulnerable versions of Rack.
The impact includes excessive consumption of CPU, memory, I/O, and bandwidth per request, which can reduce application availability by overloading server workers and increasing garbage collection pressure.
Ultimately, this leads to a denial of service condition in Rack file-serving paths that process multipart byte range responses.
How can this vulnerability be detected on my network or system? Can you suggest some commands?
This vulnerability can be detected by monitoring HTTP requests for suspicious Range headers that contain many small, overlapping byte ranges such as repeated "0-0,0-0,0-0,..." patterns.
You can inspect incoming HTTP requests on your web server or reverse proxy logs for Range headers with an unusually high number of byte ranges.
Commands to detect such requests might include using tools like grep or tcpdump to filter HTTP headers containing suspicious Range values.
- Example command to search web server logs for suspicious Range headers: grep -i 'Range: bytes=0-0,0-0' /var/log/nginx/access.log
- Using tcpdump to capture HTTP traffic and filter for Range headers: tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | grep -i 'Range:'
Monitoring for high CPU, memory, or I/O usage correlated with HTTP requests containing Range headers may also help identify exploitation attempts.
What immediate steps should I take to mitigate this vulnerability?
The primary mitigation is to update the Rack package to a patched version: 2.2.23, 3.1.21, 3.2.6, or later.
Additional immediate steps include rejecting or normalizing multipart byte range requests that contain excessive numbers of ranges.
If multipart range support is not needed, disable it to prevent processing of such Range headers.
Apply request filtering or header restrictions at reverse proxies or application boundaries to limit abusive Range headers.