GitHub Advisoryadvisory · RubyGems

GHSA-mxw3-3hh2-x2mh Rack has a Directory Traversal via Rack:Directory

HIGH Published 2026-02-17 Modified 2026-02-24 Official page ↗
Aliases
CVE-2026-22860
Ecosystem
RubyGems
Packages
rack
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weaknesses
CWE-22, CWE-548
Reviewed
2026-02-17

Affected packages

• RubyGems rack: < 2.2.22 → fixed in 2.2.22 • RubyGems rack: >= 3.0.0.beta1, < 3.1.20 → fixed in 3.1.20 • RubyGems rack: >= 3.2.0, < 3.2.5 → fixed in 3.2.5

Description

Summary `Rack::Directory`’s path check used a string prefix match on the expanded path. A request like `/../root_example/` can escape the configured root if the target path starts with the root string, allowing directory listing outside the intended root. Details In `directory.rb`, `File.expand_path(File.join(root, path_info)).start_with?(root)` does not enforce a path boundary. If the server root is `/var/www/root`, a path like `/var/www/root_backup` passes the check because it shares the same prefix, so `Rack::Directory` will list that directory also. Impact Information disclosure via directory listing outside the configured root when `Rack::Directory` is exposed to untrusted clients and a directory shares the root prefix (e.g., `public2`, `www_backup`). Mitigation • Update to a patched version of Rack that correctly checks the root prefix. • Don't name directories with the same prefix as one which is exposed via `Rack::Directory`.

Related

Alias · CVE (1)

  • CVE-2026-22860 Rack is a modular Ruby web server interface. vulnerability

Weakness · CWE (2)

  • CWE-22 Improper Limitation of a Pathname to a Restricted Directory weakness
  • CWE-548 Exposure of Information Through Directory Listing weakness

References