☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 7.5 🐛 CWE-22
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-22860

CVE-2026-22860 Path Traversal in Rack
📅 PUBLISHED: 2026-02-18 18:45 UTC 🔄 UPDATED: 2026-10-02 19:31 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.68%
👁️
0.68% probability
16.9× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-22860 is a path traversal vulnerability in the Rack::Directory component of the Rack Ruby web server interface. The vulnerability allows an attacker to bypass directory restrictions by crafting a request like /../root_example/ that escapes the configured root directory if the target path starts with the root string. This can lead to unauthorized directory listing and information disclosure. The vulnerability affects Rack versions prior to 2.2.22, 3.1.20, and 3.2.5. The CVSS score is 7.5 (High), and no public exploit code or PoC has been identified at this time.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects the Rack gem, a critical component in the Ruby ecosystem used by many web frameworks including Ruby on Rails. Organizations using Rack should immediately update to patched versions to prevent potential supply chain attacks where an attacker could exploit this vulnerability to enumerate directory structures and discover sensitive files or configuration details.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – The vulnerability can be exploited remotely over the network.
  • Attack Complexity (AC): Low (L) – No special conditions are required for exploitation.
  • Privileges Required (PR): None (N) – No authentication is needed.
  • User Interaction (UI): None (N) – No user action is required.
  • Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
  • Confidentiality (C): High (H) – Directory listing can expose sensitive file and directory names.
  • Integrity (I): None (N) – No data modification is possible.
  • Availability (A): None (N) – No denial of service impact.

Threat Level: High (7.5) – The vulnerability is easy to exploit and can lead to significant information disclosure.

Deep Dive & Mechanics

The vulnerability resides in the Rack::Directory middleware, which is used to serve static files from a specified root directory. The path validation logic incorrectly uses a string prefix match on the expanded path. This means that if the configured root is /var/www/root_example, a request to /../root_example/ will be expanded to /var/www/root_example/../root_example/, which resolves to /var/www/root_example/. However, due to the flawed prefix check, the middleware may treat this as a valid path within the root, allowing directory listing outside the intended root.

The core issue is that the code checks if the expanded path starts with the root string, but does not ensure that the path is actually within the root directory. An attacker can craft a path that, after normalization, still starts with the root string but points to a parent directory.

Vulnerable vs. Patched Code

Vulnerable Code (Rack < 2.2.22, < 3.1.20, < 3.2.5):

def call(env)
  path = Rack::Utils.unescape_path(env[Rack::PATH_INFO])
  expanded_path = File.expand_path(path, @root)
  if expanded_path.start_with?(@root)
    # serve directory listing
  else
    # reject
  end
end

Patched Code (Rack >= 2.2.22, >= 3.1.20, >= 3.2.5):

def call(env)
  path = Rack::Utils.unescape_path(env[Rack::PATH_INFO])
  expanded_path = File.expand_path(path, @root)
  if expanded_path == @root || expanded_path.start_with?(@root + "/")
    # serve directory listing
  else
    # reject
  end
end

The fix adds a check for a trailing slash after the root path, ensuring that the expanded path is either exactly the root or starts with the root followed by a separator. This prevents the prefix match from being fooled by paths that start with the root string but are actually outside it.

Exploitation & Lab Setup

Red Team

Lab Setup:

  1. Install a vulnerable version of Rack (e.g., gem install rack -v 3.1.19).
  2. Create a simple Rack application that uses Rack::Directory:
    # config.ru
    require 'rack'
    use Rack::Directory, '/var/www/root_example'
    run lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['Hello']] }
    
  3. Start the server: rackup config.ru -p 8080.

Exploitation:

  • Send a crafted request to list directories outside the root:
    GET /../root_example/ HTTP/1.1
    Host: target:8080
    
  • If the root is /var/www/root_example, this request will list the contents of /var/www/ instead of /var/www/root_example/.
  • To enumerate further, use paths like /../root_example/../../etc/ to traverse deeper.

Blue Team

Detection:

  • Monitor web server logs for unusual path traversal patterns, especially requests containing ../ sequences.
  • Look for requests where the path after normalization starts with the configured root but contains parent directory references.
  • Use the detection rules provided in the Detection Engineering section.

Mitigation:

  • Immediately update Rack to a patched version.
  • If immediate patching is not possible, implement a WAF rule to block requests containing ../ in the path.
  • Restrict directory listing to only necessary directories and disable Rack::Directory if not required.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • HTTP requests with paths containing /../ followed by the root directory name (e.g., /../root_example/).
    • Unusual directory listing responses from the server.
  • File System IOCs:
    • Unexpected access to files outside the intended root directory.
    • Log entries showing directory listing of sensitive directories (e.g., /etc, /var/log).
  • Log IOCs:
    • Web server access logs showing multiple requests with path traversal patterns.
    • Error logs indicating attempts to access restricted directories.

Detection Engineering

YARA Rule

rule CVE_2026_22860_Rack_Directory_Traversal {
    meta:
        description = "Detects path traversal attempts targeting Rack::Directory vulnerability CVE-2026-22860"
        author = "Valters IT"
        date = "2025-04-10"
        severity = "high"
    strings:
        $traversal = "/../"
        $root_pattern = /\/\.\.\/[a-zA-Z0-9_]+\//
    condition:
        any of them
}

Sigma Rule

title: CVE-2026-22860 Rack Directory Traversal Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests attempting to exploit CVE-2026-22860 path traversal in Rack::Directory
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-uri-query|contains: "/../"
    condition: selection
falsepositives:
    - Legitimate use of parent directory references in some applications
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2026-22860 Rack Directory Traversal Attempt"; flow:to_server,established; content:"/../"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

  1. Immediate Patch: Update Rack to version 2.2.22, 3.1.20, or 3.2.5 or later.
  2. Workaround: If patching is not immediately possible, disable Rack::Directory or implement a custom middleware that validates paths more strictly.
  3. WAF Rules: Deploy web application firewall rules to block requests containing ../ sequences.
  4. Monitoring: Enable detailed logging and monitor for path traversal attempts.
  5. Least Privilege: Ensure that the web server runs with minimal file system permissions to limit the impact of directory listing.

Valters IT Signature:

Valters IT
Senior DevSecOps Engineer
Cyber Threat Intelligence Expert
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-22860/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.