GHSA-wvg4-6p58-3gh3: Rack: Rack::Static header_rules bypass via dot-segment normalization mismatch
Rack is a modular Ruby web server interface. Prior to 2.2.25, 3.1.23, and 3.2.8, Rack::Static serves a path after Utils.cleanpathinfo normalization but evaluates headerrules against a path that is only URL-decoded. An unauthenticated attacker can request a known file through raw or percent-encoded dot segments and receive it without path-specific security headers such as Content-Disposition or Content-Security-Policy. Applications that do not use path-specific headerrules are not affected. 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 affected?
Only applications that use Rack::Static with path-specific header_rules are affected. Applications that do not use path-specific header_rules are not affected.
What does an attacker need to exploit this issue?
An attacker does not need authentication or user interaction. They need to know a file path and request it using raw or percent-encoded dot segments so the file is served without the headers intended for that path.
What is the impact of a successful bypass?
The attacker can receive a known static file without path-specific security headers, including headers such as Content-Disposition or Content-Security-Policy. The provided severity vector indicates integrity impact but no confidentiality or availability impact.
Which versions contain the fix?
Upgrade Rack to 2.2.25, 3.1.23, or 3.2.8, depending on the release line in use. Versions prior to those releases are affected when the application uses the vulnerable header_rules configuration.