MEDIUMCVSS v3.1 5.3Vulnerability

CVE-2026-125110

## Summary `Rack::Static` normalizes the request path with `Utils.clean_path_info` when deciding which file to serve, but matches `header_rules` against a path that is only URL-decoded. A request containing dot segments, raw or percent-encoded, is served the normalized target file while the header rules for that file's location are not applied. This allows an attacker to receive a protected static file without the security headers configured for it. ## Details `Rack::Static#call` computes the served path as `Utils.clean_path_info(Utils.unescape_path(path))`. `Rack::Static#applicable_rules` applies only `Utils.unescape_path` before testing string and regular expression rules. A request for `/assets/../uploads/file.html` or `/assets/..%2fuploads/file.html` is served as `uploads/file.html`, but the decoded path `/assets/../uploads/file.html` does not start with `uploads`, so a rule scoped to that directory never matches. The fix for CVE-2026-34786 (GHSA-q4qf-9j86-f5mh) added URL decoding to rule matching but did not add dot segment normalization, so versions that include that fix remain affected. ## Impact Applications that use `Rack::Static` `header_rules` to attach security-relevant headers to particular paths or file types are affected. An unauthenticated attacker who knows the path of a protected file can request it through a dot segment path and receive it without those headers, for example without `Content-Disposition: attachment` or a restrictive `Content-Security-Policy` that prevents uploaded HTML from rendering inline. The file itself is served unchanged. Applications that do not use path-specific `header_rules` are not affected. ## Mitigation * Update to a patched version of Rack in which `header_rules` are matched against the same normalized path used to serve the file. * Reject requests containing dot segments at a reverse proxy or application boundary. * Do not rely solely on `Rack::Static` `header_rules` to prevent inline rendering of untrusted

Properties

Severity
medium
Summary
Rack: Rack::Static header_rules bypass via dot-segment normalization mismatch
Nvd fetched at
2026-11-10T23:33:48.924589+00:00
Epss score
0.00251
Cvss severity
MEDIUM
Cvss score
5.3
Retrieved at
2026-11-10T23:35:17+00:00
Ghsa published
2026-11-10T18:50:07Z
Source url
https://github.com/advisories/GHSA-wvg4-6p58-3gh3
Ghsa updated
2026-11-10T18:50:07Z
Ghsa id
GHSA-wvg4-6p58-3gh3
Last source
FIRST EPSS
Score
5.3
Cvss version
3.1
Cve id
CVE-2026-125110
Cvss vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
First seen by Signal
2026-11-10T03:20:43+00:00
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Published at
2026-11-09T22:18:42.287

Related Entities (3)

AFFECTS (1)

→[Software]rubygems/rack

VULNERABLE_TO (1)

←[Software]rubygems/rack

Related research

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-125110 (CVSS v3.1 5.3) — Ninja Signal Threat Intelligence | Ninja Signal