Ruby/rack/3.0.13


Rack provides a minimal, modular and adaptable interface for developing web applications in Ruby. By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call.

https://rubygems.org/gems/rack
MIT

2 Security Vulnerabilities

Local File Inclusion in Rack::Static

Published date: 2025-03-10T22:19:30Z
CVE: CVE-2025-27610
Links:

Summary

Rack::Static can serve files under the specified root: even if urls: are provided, which may expose other files under the specified root: unexpectedly.

Details

The vulnerability occurs because Rack::Static does not properly sanitize user-supplied paths before serving files. Specifically, encoded path traversal sequences are not correctly validated, allowing attackers to access files outside the designated static file directory.

Impact

By exploiting this vulnerability, an attacker can gain access to all files under the specified root: directory, provided they are able to determine then path of the file.

Mitigation

  • Update to the latest version of Rack, or
  • Remove usage of Rack::Static, or
  • Ensure that root: points at a directory path which only contains files which should be accessed publicly.

It is likely that a CDN or similar static file server would also mitigate the issue.

Affected versions: ["3.1.2", "3.1.1", "3.1.0", "3.1.3", "3.1.4", "3.1.6", "3.1.5", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.0.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.4.1", "3.0.4.2", "3.0.5", "3.0.6", "3.0.6.1", "3.0.7", "3.0.8", "3.0.9", "3.0.9.1", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "2.2.3", "2.2.2", "2.2.1", "2.2.0", "2.1.1", "2.0.9", "2.0.7", "2.0.6", "2.0.4", "2.0.3", "2.0.2", "1.6.11", "1.6.7", "1.6.6", "1.6.5", "1.6.4", "1.6.1", "1.6.0", "1.6.0.beta", "1.5.5", "1.5.3", "1.5.1", "1.5.0.beta.2", "1.5.0.beta.1", "1.4.6", "1.4.3", "1.4.2", "1.3.7", "1.3.5", "1.3.4", "1.3.2", "1.3.0", "1.3.0.beta", "1.2.7", "1.2.6", "1.2.3", "1.2.1", "1.1.4", "1.1.3", "1.1.1", "1.1.1.pre", "1.1.0", "1.0.0", "0.9.1", "0.4.0", "0.2.0", "0.1.0", "2.1.4", "2.1.3", "2.1.2", "2.1.0", "2.0.8", "2.0.5", "2.0.1", "2.0.0.rc1", "2.0.0.alpha", "1.6.13", "1.6.12", "1.6.10", "1.6.9", "1.6.8", "1.6.3", "1.6.2", "1.6.0.beta2", "1.5.4", "1.5.2", "1.5.0", "1.4.7", "1.4.5", "1.4.4", "1.4.1", "1.4.0", "1.3.10", "1.3.9", "1.3.8", "1.3.6", "1.3.3", "1.3.1", "1.3.0.beta2", "1.2.8", "1.2.5", "1.2.4", "1.2.2", "1.2.0", "1.1.6", "1.1.5", "1.1.2", "1.0.1", "0.9.0", "0.3.0", "2.2.3.1", "2.1.4.1", "2.0.9.1", "2.2.4", "2.2.5", "2.2.6", "2.2.6.2", "2.2.6.1", "2.1.4.2", "2.0.9.2", "2.2.6.3", "2.1.4.3", "2.0.9.3", "2.2.6.4", "2.2.7", "2.2.8", "2.2.8.1", "2.1.4.4", "2.0.9.4", "2.2.9", "2.2.10", "2.2.11", "2.2.12"]
Secure versions: [2.2.14, 2.2.15, 2.2.16, 2.2.17, 3.0.16, 3.0.17, 3.0.18, 3.1.14, 3.1.15, 3.1.16]
Recommendation: Update to version 3.1.16.

Rack has an Unbounded-Parameter DoS in Rack::QueryParser

Published date: 2025-05-08T14:45:48Z
CVE: CVE-2025-46727
Links:

Summary

Rack::QueryParser parses query strings and application/x-www-form-urlencoded bodies into Ruby data structures without imposing any limit on the number of parameters, allowing attackers to send requests with extremely large numbers of parameters.

Details

The vulnerability arises because Rack::QueryParser iterates over each &-separated key-value pair and adds it to a Hash without enforcing an upper bound on the total number of parameters. This allows an attacker to send a single request containing hundreds of thousands (or more) of parameters, which consumes excessive memory and CPU during parsing.

Impact

An attacker can trigger denial of service by sending specifically crafted HTTP requests, which can cause memory exhaustion or pin CPU resources, stalling or crashing the Rack server. This results in full service disruption until the affected worker is restarted.

Mitigation

  • Update to a version of Rack that limits the number of parameters parsed, or
  • Use middleware to enforce a maximum query string size or parameter count, or
  • Employ a reverse proxy (such as Nginx) to limit request sizes and reject oversized query strings or bodies.

Limiting request body sizes and query string lengths at the web server or CDN level is an effective mitigation.

Affected versions: ["3.1.2", "3.1.1", "3.1.0", "3.1.3", "3.1.4", "3.1.6", "3.1.5", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.0.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.4.1", "3.0.4.2", "3.0.5", "3.0.6", "3.0.6.1", "3.0.7", "3.0.8", "3.0.9", "3.0.9.1", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "2.2.3", "2.2.2", "2.2.1", "2.2.0", "2.1.1", "2.0.9", "2.0.7", "2.0.6", "2.0.4", "2.0.3", "2.0.2", "1.6.11", "1.6.7", "1.6.6", "1.6.5", "1.6.4", "1.6.1", "1.6.0", "1.6.0.beta", "1.5.5", "1.5.3", "1.5.1", "1.5.0.beta.2", "1.5.0.beta.1", "1.4.6", "1.4.3", "1.4.2", "1.3.7", "1.3.5", "1.3.4", "1.3.2", "1.3.0", "1.3.0.beta", "1.2.7", "1.2.6", "1.2.3", "1.2.1", "1.1.4", "1.1.3", "1.1.1", "1.1.1.pre", "1.1.0", "1.0.0", "0.9.1", "0.4.0", "0.2.0", "0.1.0", "2.1.4", "2.1.3", "2.1.2", "2.1.0", "2.0.8", "2.0.5", "2.0.1", "2.0.0.rc1", "2.0.0.alpha", "1.6.13", "1.6.12", "1.6.10", "1.6.9", "1.6.8", "1.6.3", "1.6.2", "1.6.0.beta2", "1.5.4", "1.5.2", "1.5.0", "1.4.7", "1.4.5", "1.4.4", "1.4.1", "1.4.0", "1.3.10", "1.3.9", "1.3.8", "1.3.6", "1.3.3", "1.3.1", "1.3.0.beta2", "1.2.8", "1.2.5", "1.2.4", "1.2.2", "1.2.0", "1.1.6", "1.1.5", "1.1.2", "1.0.1", "0.9.0", "0.3.0", "2.2.3.1", "2.1.4.1", "2.0.9.1", "2.2.4", "2.2.5", "2.2.6", "2.2.6.2", "2.2.6.1", "2.1.4.2", "2.0.9.2", "2.2.6.3", "2.1.4.3", "2.0.9.3", "2.2.6.4", "2.2.7", "2.2.8", "2.2.8.1", "2.1.4.4", "2.0.9.4", "2.2.9", "2.2.10", "2.2.11", "2.2.12", "2.2.13"]
Secure versions: [2.2.14, 2.2.15, 2.2.16, 2.2.17, 3.0.16, 3.0.17, 3.0.18, 3.1.14, 3.1.15, 3.1.16]
Recommendation: Update to version 3.1.16.

160 Other Versions

Version License Security Released
1.1.1.pre UNKNOWN 38 2011-02-10 - 03:12 over 14 years
1.1.0 UNKNOWN 38 2010-01-03 - 23:15 over 15 years
1.0.1 UNKNOWN 40 2009-10-18 - 22:45 over 15 years
1.0.0 UNKNOWN 40 2009-07-25 - 18:02 almost 16 years
0.9.1 UNKNOWN 40 2009-07-25 - 18:02 almost 16 years
0.9.0 UNKNOWN 40 2009-07-25 - 18:02 almost 16 years
0.4.0 UNKNOWN 40 2009-07-25 - 18:02 almost 16 years
0.3.0 UNKNOWN 38 2009-07-25 - 18:02 almost 16 years
0.2.0 UNKNOWN 38 2009-07-25 - 18:02 almost 16 years
0.1.0 UNKNOWN 38 2009-07-25 - 18:02 almost 16 years