CVE-2026-34786: 
Ruby vulnerability analysis and mitigation

Overview

CVE-2026-34786 is a security header bypass vulnerability in Rack, the modular Ruby web server interface, caused by a canonicalization mismatch in Rack::Static#applicable_rules. The flaw allows unauthenticated attackers to request URL-encoded variants of static file paths and receive those files without the security-relevant response headers that header_rules were intended to apply. Affected versions include Rack prior to 2.2.23, 3.0.0.beta1 through 3.1.20, and 3.2.0 through 3.2.5. The vulnerability was published on April 1–2, 2026, and has a CVSS v3.1 base score of 5.3 (Medium) (GitHub Advisory, Rack Advisory).

Technical details

The root cause is classified as CWE-180 (Incorrect Behavior Order: Validate Before Canonicalize). Rack::Static#applicable_rules evaluates header_rules — including :fonts, Array, and Regexp rule types — against the raw, URL-encoded PATH_INFO, while the underlying file-serving logic decodes the path before serving the file. For example, a request to /fonts/test%2Ewoff (where %2E is the URL-encoded form of .) bypasses the regex match /.woff/ applied to the raw path, yet the file is still served because the path is decoded before disk lookup. This canonicalization mismatch means security headers configured via header_rules are silently omitted for encoded path variants. No public proof-of-concept exploit code has been identified (GitHub Advisory, Rack Advisory).

Impact

The primary impact is an integrity bypass: attackers can circumvent security-relevant HTTP response headers (e.g., X-Frame-Options for clickjacking defense, Content-Security-Policy, or other response policies) applied to static content via Rack::Static header_rules. There is no direct confidentiality or availability impact — the file itself is still served, but without the protective headers. The practical severity depends on which headers are configured via header_rules; deployments using these rules only for non-security purposes (e.g., caching) are minimally affected, while those relying on them for security controls face meaningful risk (Rack Advisory, GitHub Advisory).

Exploitability

No public proof-of-concept exploit code exists, and there is no evidence of in-the-wild exploitation at this time (GitHub Advisory). The vulnerability requires no authentication, no user interaction, and low attack complexity, making it trivially exploitable by any network-accessible attacker once a target is identified. The EPSS score is approximately 0.029–0.045%, placing it in the 14th percentile for exploitation likelihood within 30 days. The CVE is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog.

Exploitation steps

  1. Reconnaissance: Identify web applications using Rack versions prior to 2.2.23, 3.1.21, or 3.2.6 that serve static content via Rack::Static with security-relevant header_rules configured.
  2. Identify static file paths: Browse or enumerate the application to discover static file paths subject to header_rules (e.g., /fonts/example.woff, /assets/style.css).
  3. Craft URL-encoded request: Construct an HTTP request using a URL-encoded variant of the static path, replacing one or more characters with their percent-encoded equivalents (e.g., replace . with %2E: /fonts/example%2Ewoff).
  4. Send the request: Issue the crafted HTTP GET request to the target server. The Rack::Static#applicable_rules method fails to match the encoded path against configured header_rules, so the security headers are not applied.
  5. Receive file without security headers: The server decodes the path, locates and serves the file, but omits the intended security response headers — enabling the attacker to interact with the content in ways the headers were designed to prevent (e.g., embedding in an iframe if X-Frame-Options is bypassed) (Rack Advisory, GitHub Advisory).

Indicators of compromise

  • Network: HTTP GET requests to static file paths containing percent-encoded characters in place of standard file extension delimiters (e.g., %2E instead of ., %2F instead of /) targeting known static asset directories such as /fonts/, /assets/, or /static/.
  • Logs: Web server or Rack access logs showing requests to URL-encoded variants of static paths (e.g., /fonts/test%2Ewoff) that return HTTP 200 responses, particularly if the same file is also accessible via its unencoded path.
  • Response Headers: Absence of expected security headers (e.g., X-Frame-Options, Content-Security-Policy) in HTTP responses for static files when those headers are present for the unencoded path equivalents.

Mitigation and workarounds

Upgrade Rack to one of the patched versions: 2.2.23 (for the 2.2.x branch), 3.1.21 (for the 3.1.x branch), or 3.2.6 (for the 3.2.x branch). As a workaround prior to patching, avoid relying solely on Rack::Static header_rules for security-critical headers; instead, configure security headers at the reverse proxy or web server layer (e.g., nginx, Apache) where they apply consistently to both encoded and unencoded path forms. Additionally, consider normalizing or rejecting percent-encoded path variants for static content at the edge. IBM has issued advisories for affected products including Aspera Faspex, Aspera Enterprise WebApps, Aspera Shares, API Connect, CloudPak for AIOps, and License Metric Tool (GitHub Advisory, Rack Advisory).

Community reactions

The vulnerability was coordinated and published by Rack maintainer ioquatix, with harukioya credited as the reporter and jeremyevans as the remediation reviewer (Rack Advisory). Ubuntu issued security notice USN-8182-1 and SUSE released updates (SUSE-SU-2026:1745-1 and SUSE-SU-2026:1964-1) addressing this and related Rack vulnerabilities. IBM published multiple security bulletins covering affected products including Aspera Faspex, API Connect, and CloudPak for AIOps. No significant social media discussion or independent researcher commentary has been identified beyond standard vulnerability tracking.

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

ruby-rack: 2.2.22-0+deb12u2

Fixed

sid

ruby-rack: 3.2.6-2

Fixed

trixie

ruby-rack: 3.1.20-0+deb13u2

Fixed

Ubuntu

Fixed

bionic (esm-apps)

ruby-rack: 1.6.4-4ubuntu0.2+esm10

Fixed

devel

ruby-rack

Affected

focal (esm-apps)

ruby-rack: 2.0.7-2ubuntu0.1+esm10

Fixed

jammy

ruby-rack

Affected

jammy (esm-apps)

ruby-rack: 2.1.4-5ubuntu1.2+esm3

Fixed

noble

ruby-rack: 2.2.7-1ubuntu0.7

Fixed

questing

ruby-rack: 3.1.16-0.1ubuntu0.3

Fixed

resolute

ruby-rack

Affected

RHEL / CentOS

Affected

OpenShift

openshift-logging/cluster-logging-operator-bundle

Affected

RHEL 8

pcs.src

Affected

RHEL 9

pcs.src

Affected

RHEL 10

pcs.src

Affected

Source: This report was generated using AI

Related Ruby vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-110264CRITICAL10
  • Ruby logoRuby
  • rubygem-rdoc
NoYesOct 22, 2026
GHSA-h7x6-9mqf-vgmxHIGH8.2
  • Ruby logoRuby
  • avo
NoYesOct 22, 2026
GHSA-x65r-p6hf-94hvMEDIUM6.5
  • Ruby logoRuby
  • avo
NoYesOct 22, 2026
GHSA-58rx-96gf-w92xMEDIUM6.1
  • Ruby logoRuby
  • ransack
NoYesOct 25, 2026
CVE-2026-63183LOWN/A
  • Ruby logoRuby
  • omniauth
NoNoOct 22, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management