CVE-2026-125110: 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 using 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 needs network access and knowledge of a file served by Rack::Static. No authentication or user interaction is required; the attacker requests the file using raw or percent-encoded dot segments.
What is the practical impact?
A matching static file can be served without its intended path-specific security headers, such as Content-Disposition or Content-Security-Policy. The issue affects header enforcement rather than confidentiality or availability according to the provided impact vector.
Which Rack versions contain the fix?
The issue is fixed in Rack 2.2.25, 3.1.23, and 3.2.8. Versions before those releases are affected when the application uses the vulnerable Rack::Static header_rules configuration.