Vulnerability GHSA-p8x9-v4hv-2w4g

Low Risk
LOW RISK
CVSS Score: 3.7
Score Range: < 4.0
Low severity vulnerabilities (CVSS < 4.0). Hygiene issues that can accumulate but pose lower immediate risk.
9 hours ago
November 10, 2026 at 07:26 PM UTC
Rack: Multipart boundary ambiguity guard in Rack::Multipart::Parser can be bypassed with a quoted boundary value, allowing WAF bypass
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7

Summary

Rack: Multipart boundary ambiguity guard in Rack::Multipart::Parser can be bypassed with a quoted boundary value, allowing WAF bypass

Details

Summary

The guard added for CVE-2026-26961 (GHSA-vgpv-f759-9wx3), which rejects multipart requests with more than one boundary parameter, only inspects the part of the Content-Type header after the boundary it extracts. A Content-Type whose first boundary parameter is empty or begins with a quote, semicolon, or comma is skipped by the extraction pattern, so a second boundary parameter is accepted silently and Rack parses the body with a boundary that a conforming parser would not derive from the header.

Details

Rack::Multipart::Parser.parse_boundary extracts the boundary with a regular expression that uses a lazy prefix and a value class excluding ", ;, and ,. For a header such as multipart/form-data; boundary=";boundary=AaB03x" or multipart/form-data; boundary=; boundary=AaB03x, the pattern skips the first boundary= and anchors on the second, and the subsequent check for another boundary= in the remaining text finds nothing. Rack then uses AaB03x.

RFC 9110 parses the first header as a single parameter whose value is ;boundary=AaB03x, which is not a legal boundary under RFC 2046, so the only conformant outcome is rejection. Inspecting intermediaries that implement the standard grammar, such as ModSecurity, see a different boundary or no multipart body at all.

The fix counts boundary= occurrences across the entire header value and rejects the request when there is more than one.

Impact

As with CVE-2026-26961, an attacker can craft a multipart request that a web application firewall or other inspecting proxy in front of a Rack application interprets differently from Rack, so form fields and file uploads reach the application without inspection. Rack itself grants no capability beyond that of a well-formed request with the same body. All supported versions, including 2.2, are affected.

Mitigation

  • Update to a patched version of Rack.
  • Reject requests whose Content-Type contains more than one boundary parameter at the reverse proxy.

Related Vulnerabilities

Other vulnerabilities affecting the same packages

High Risk
9 hours ago
Rack: Multipart parsing allows DoS via unbounded scan buffer growth
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7 GHSA-5v64-555j-wjxm
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7 GHSA-5v64-555j-wjxm
Medium Risk
9 hours ago
Rack: Rack::Request#host_with_port (and #base_url / #url) return the raw invalid Host header — incomplete fix of CVE-2026-34835
3.0.0 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7 GHSA-2j8w-xcrc-x985
3.0.0 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7 GHSA-2j8w-xcrc-x985
Medium Risk
10 hours ago
Rack: Rack::Static header_rules bypass via dot-segment normalization mismatch
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7 GHSA-wvg4-6p58-3gh3
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.7 GHSA-wvg4-6p58-3gh3
Medium Risk
7 months ago
Rack::Request accepts invalid Host characters, enabling host allowlist bypass
3.0.0.beta1 and 3.0.0.rc1 and 3.0.0 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.5 GHSA-g2pf-xv49-m2h5
3.0.0.beta1 and 3.0.0.rc1 and 3.0.0 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.5 GHSA-g2pf-xv49-m2h5
Medium Risk
7 months ago
Rack has Content-Length mismatch in Rack::Files error responses
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 2.2.22 and 3.0.0.beta1 and 3.0.0.rc1 and 3.0.0 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.5 GHSA-q2ww-5357-x388
0.1.0 - 0.4.0 and 0.9.0 - 1.1.0 and 1.1.1.pre and 1.1.1 - 1.2.8 and 1.3.0.beta and 1.3.0.beta2 and 1.3.0 - 1.4.7 and 1.5.0.beta.1 and 1.5.0.beta.2 and 1.5.0 - 1.5.5 and 1.6.0.beta and 1.6.0.beta2 and 1.6.0 - 1.6.13 and 2.0.0.alpha and 2.0.0.rc1 and 2.0.1 - 2.0.9 and 2.0.9.1 and 2.0.9.2 and 2.0.9.3 and 2.0.9.4 and 2.1.0 - 2.1.4 and 2.1.4.1 and 2.1.4.2 and 2.1.4.3 and 2.1.4.4 and 2.2.0 - 2.2.3 and 2.2.3.1 and 2.2.4 - 2.2.6 and 2.2.6.1 and 2.2.6.2 and 2.2.6.3 and 2.2.6.4 and 2.2.7 - 2.2.8 and 2.2.8.1 and 2.2.9 - 2.2.22 and 3.0.0.beta1 and 3.0.0.rc1 and 3.0.0 - 3.0.4 and 3.0.4.1 and 3.0.4.2 and 3.0.5 - 3.0.6 and 3.0.6.1 and 3.0.7 - 3.0.9 and 3.0.9.1 and 3.0.10 - 3.2.5 GHSA-q2ww-5357-x388
View all vulnerabilities for these packages

Impacted packages

Timeline

Published
9 hours ago
November 10, 2026 at 07:26 PM UTC
Fixed (3.2.8)
12 days ago
October 30, 2026 at 02:15 AM UTC
Fixed (2.2.25)
12 days ago
October 30, 2026 at 02:17 AM UTC
Last Modified
9 hours ago
November 10, 2026 at 07:45 PM UTC