GHSA-p8x9-v4hv-2w4g: Rack: Multipart boundary ambiguity guard in Rack::Multipart::Parser can be bypassed with a quoted boundary value, allowing WAF bypass
Rack is a modular Ruby web server interface. Prior to 2.2.25, 3.1.23, and 3.2.8, Rack::Multipart::Parser.parseboundary can skip a leading empty or quoted boundary parameter in a multipart Content-Type header and accept a later parameter. Rack can therefore parse a request body with a boundary that a conforming intermediary would not derive, allowing form fields or file uploads to reach an application without the intended proxy or web application firewall inspection. This issue is fixed in versions 2.2.25, 3.1.23, and 3.2.8.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Rackto a version that resolves this vulnerability.Fixed in 2.2.25 - Upgrade
Upgrade
Rackto a version that resolves this vulnerability.Fixed in 3.1.23 - Upgrade
Upgrade
Rackto a version that resolves this vulnerability.Fixed in 3.2.8
Event History
Frequently Asked Questions
Which deployments are exposed to this issue?
Deployments using Rack versions earlier than 2.2.25, 3.1.23, or 3.2.8 are affected when requests pass through an intermediary such as a proxy or web application firewall that derives multipart boundaries differently from Rack.
What does an attacker need to exploit the bypass?
An attacker needs to send a multipart request with a Content-Type header containing a leading empty or quoted boundary parameter followed by another boundary parameter. The attack relies on Rack accepting the later parameter while a conforming intermediary derives a different boundary.
What is the impact if exploitation succeeds?
Form fields or file uploads can reach the application without receiving the intended proxy or web application firewall inspection. The provided severity vector indicates integrity impact only, with no stated confidentiality or availability impact.
How can this be remediated?
Upgrade Rack to version 2.2.25, 3.1.23, or 3.2.8, depending on the supported release line in use.