Every CVE Search/ Get API key

CVE-2026-22860

Rack has a Directory Traversal via Rack:Directory

7.5 HighFix available

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
None
Availability
None

Exploit likelihood

0.76%Up 0.7 points since Feb 19, 2026
90%50%10%1%

What each source reports

CVE List Score used 7.5

Rack has a Directory Traversal via Rack:Directory

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Record
CVE-2026-22860
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-22, CWE-548, CWE-22
Updated
2026-11-02
EUVDEUVD-2026-7914 7.5

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Record
EUVD-2026-7914
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-mxw3-3hh2-x2mh 7.5

Rack has a Directory Traversal via Rack:Directory

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.
Record
GHSA-mxw3-3hh2-x2mh
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-22, CWE-548
Updated
2026-11-02
NVD 7.5

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Record
CVE-2026-22860
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-22, CWE-548
Updated
2026-11-02
OSV 7.5

Rack has a Directory Traversal via Rack:Directory

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Record
CVE-2026-22860
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-22, CWE-548
Updated
2026-11-02
OSVDEBIAN-CVE-2026-22860 7.5

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Record
DEBIAN-CVE-2026-22860
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Updated
2026-11-02
Show 5 moreShow less
OSVGHSA-mxw3-3hh2-x2mh 7.5

Rack has a Directory Traversal via Rack:Directory

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.
Record
GHSA-mxw3-3hh2-x2mh
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weakness
CWE-22, CWE-548
Updated
2026-11-02
OSVUBUNTU-CVE-2026-22860 7.5

Rack is a modular Ruby web server interface. Prior to versions 2.2.22, 3.1.20, and 3.2.5, 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. Versions 2.2.22, 3.1.20, and 3.2.5 fix the issue.

Record
UBUNTU-CVE-2026-22860
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Updated
2026-11-02
OSVMGASA-2026-0075 No score

Updated ruby-rack packages fix security vulnerabilities

Rack has a Directory Traversal via Rack:Directory. (CVE-2026-22860) Rack's Stored XSS in Rack::Directory via javascript: filenames rendered into anchor href. (CVE-2026-25500)

Record
MGASA-2026-0075
Updated
2026-11-02
OSVopenSUSE-SU-2026:10286-1 No score

ruby4.0-rubygem-rack-2.2-2.2.22-1.1 on GA media

These are all security issues fixed in the ruby4.0-rubygem-rack-2.2-2.2.22-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:10286-1
Updated
2026-11-02
OSVUSN-8066-1 No score

ruby-rack vulnerabilities

Minh Pham Quang discovered that Rack did not correctly handle parsing certain paths, which could lead to a path traversal attack. An attacker could possibly use this issue to leak sensitive information. (CVE-2026-22860)

Ali Firas discovered that Rack did not correctly sanitize certain inputs. An attacker could possibly use this issue to execute arbitrary code. (CVE-2026-25500)

Record
USN-8066-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
rack
RubyGems
before 2.2.22
2.2.22
rack
RubyGems
3.0.0.beta1 up to 3.1.20
3.1.20
rack
RubyGems
3.2.0 up to 3.2.5
3.2.5
ruby-rack
Debian:12
before 2.2.22-0+deb12u1, plus listed versions
2.2.13-1~deb12u12.2.20-0+deb12u12.2.6.4-12.2.6.4-1+deb12u12.2.7-12.2.7-1.1
2.2.22-0+deb12u1
ruby-rack
Debian:13
before 3.1.20-0+deb13u1, plus listed versions
3.1.16-0.13.1.18-13.1.18-1~deb13u1
3.1.20-0+deb13u1
ruby-rack
Debian:14
before 3.2.5-1, plus listed versions
3.1.16-0.13.1.18-13.1.18-1~deb13u13.2.4-1
3.2.5-1
ruby-rack
Debian:11
From an advisory covering 2 CVEs
before 2.1.4-3+deb11u5, plus listed versions
2.1.4-32.1.4-3+deb11u12.1.4-3+deb11u22.1.4-3+deb11u32.1.4-3+deb11u4
2.1.4-3+deb11u5
ruby-rack
Debian:12
From an advisory covering 2 CVEs
before 2.2.22-0+deb12u1, plus listed versions
2.2.13-1~deb12u12.2.20-0+deb12u12.2.6.4-12.2.6.4-1+deb12u12.2.7-12.2.7-1.1
2.2.22-0+deb12u1
ruby-rack
Debian:13
From an advisory covering 2 CVEs
before 3.1.20-0+deb13u1, plus listed versions
3.1.16-0.13.1.18-13.1.18-1~deb13u1
3.1.20-0+deb13u1
rack
RubyGems
before 2.2.22, plus listed versions
0.1.00.2.00.3.00.4.00.9.0
Show 45 moreShow less
0.9.11.0.01.0.11.1.01.1.11.1.1.pre1.1.21.1.31.1.41.1.51.1.61.2.01.2.11.2.21.2.31.2.41.2.51.2.61.2.71.2.81.3.01.3.0.beta1.3.0.beta21.3.11.3.101.3.21.3.31.3.41.3.51.3.61.3.71.3.81.3.91.4.01.4.11.4.21.4.31.4.41.4.51.4.61.4.71.5.01.5.0.beta.11.5.0.beta.21.5.1
2.2.22
Show 13 moreShow less
Affected packages
PackageAffectedFixed
rack
RubyGems
3.0.0.beta1 up to 3.1.20, plus listed versions
3.0.03.0.0.rc13.0.13.0.103.0.11
Show 39 moreShow less
3.0.123.0.133.0.143.0.153.0.163.0.173.0.183.0.23.0.33.0.43.0.4.13.0.4.23.0.53.0.63.0.6.13.0.73.0.83.0.93.0.9.13.1.03.1.13.1.103.1.113.1.123.1.133.1.143.1.153.1.163.1.173.1.183.1.193.1.23.1.33.1.43.1.53.1.63.1.73.1.83.1.9
3.1.20
rack
RubyGems
3.2.0 up to 3.2.5, plus listed versions
3.2.13.2.23.2.33.2.4
3.2.5
ruby-rack
Mageia:9
From an advisory covering 2 CVEs
before 2.2.22-1.mga9
2.2.22-1.mga9
ruby-rack
Ubuntu:Pro:14.04:LTS
All versions, plus listed versions
1.5.2-11.5.2-1ubuntu0.1~esm11.5.2-3+deb8u3ubuntu1~esm21.5.2-3+deb8u3ubuntu1~esm31.5.2-3+deb8u3ubuntu1~esm4
Show 6 moreShow less
1.5.2-3+deb8u3ubuntu1~esm61.5.2-3+deb8u3ubuntu1~esm71.5.2-3+deb8u3ubuntu1~esm81.5.2-3+deb8u3ubuntu1~esm91.5.2-3+deb8u3ubuntu1~esm101.5.2-3+deb8u3ubuntu1~esm11
None known
ruby-rack
Ubuntu:Pro:16.04:LTS
All versions, plus listed versions
1.5.2-41.6.4-21.6.4-31.6.4-3ubuntu0.11.6.4-3ubuntu0.2
Show 9 moreShow less
1.6.4-3ubuntu0.2+esm11.6.4-3ubuntu0.2+esm21.6.4-3ubuntu0.2+esm41.6.4-3ubuntu0.2+esm51.6.4-3ubuntu0.2+esm61.6.4-3ubuntu0.2+esm71.6.4-3ubuntu0.2+esm81.6.4-3ubuntu0.2+esm91.6.4-3ubuntu0.2+esm10
None known
ruby-rack
Ubuntu:Pro:18.04:LTS
All versions, plus listed versions
1.6.4-41.6.4-4ubuntu0.11.6.4-4ubuntu0.21.6.4-4ubuntu0.2+esm11.6.4-4ubuntu0.2+esm2
Show 7 moreShow less
1.6.4-4ubuntu0.2+esm41.6.4-4ubuntu0.2+esm51.6.4-4ubuntu0.2+esm61.6.4-4ubuntu0.2+esm71.6.4-4ubuntu0.2+esm81.6.4-4ubuntu0.2+esm91.6.4-4ubuntu0.2+esm10
None known
ruby-rack
Ubuntu:Pro:20.04:LTS
before 2.0.7-2ubuntu0.1+esm9, plus listed versions
2.0.6-32.0.7-22.0.7-2ubuntu0.12.0.7-2ubuntu0.1+esm12.0.7-2ubuntu0.1+esm2
Show 6 moreShow less
2.0.7-2ubuntu0.1+esm32.0.7-2ubuntu0.1+esm42.0.7-2ubuntu0.1+esm52.0.7-2ubuntu0.1+esm62.0.7-2ubuntu0.1+esm72.0.7-2ubuntu0.1+esm8
2.0.7-2ubuntu0.1+esm9
ruby-rack
Ubuntu:Pro:22.04:LTS
before 2.1.4-5ubuntu1.2+esm2, plus listed versions
2.1.4-32.1.4-42.1.4-52.1.4-5ubuntu12.1.4-5ubuntu1+esm2
Show 8 moreShow less
2.1.4-5ubuntu1+esm32.1.4-5ubuntu1+esm42.1.4-5ubuntu1+esm52.1.4-5ubuntu1.12.1.4-5ubuntu1.1+esm12.1.4-5ubuntu1.1+esm22.1.4-5ubuntu1.22.1.4-5ubuntu1.2+esm1
2.1.4-5ubuntu1.2+esm2
ruby-rack
Ubuntu:24.04:LTS
before 2.2.7-1ubuntu0.6, plus listed versions
2.2.4-32.2.7-12.2.7-1ubuntu0.12.2.7-1ubuntu0.22.2.7-1ubuntu0.32.2.7-1ubuntu0.42.2.7-1ubuntu0.5
2.2.7-1ubuntu0.6
ruby-rack
Ubuntu:25.10
before 3.1.16-0.1ubuntu0.2, plus listed versions
2.2.7-1.13.1.16-0.13.1.16-0.1ubuntu0.1
3.1.16-0.1ubuntu0.2
ruby-rack
Ubuntu:26.10
before 3.2.4-1ubuntu1
3.2.4-1ubuntu1
ruby-rack
Ubuntu:26.04:LTS
before 3.2.4-1ubuntu1, plus listed versions
3.1.16-0.13.1.18-13.1.18-1build1
3.2.4-1ubuntu1
rubygem-rack-2.2
openSUSE:Tumbleweed
From an advisory covering 27 CVEs
before 2.2.22-1.1
2.2.22-1.1

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-22860 is a high vulnerability (CVSS 7.5) in Rack, published February 17, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.76%, the 55th percentile. Fixed in rack 2.2.22.

References

Show 39 moreShow less
This page doesn't list everything

Left out here: 72 versions. The JSON record has them.

MoveEnter Open