ghsa-625h-95r8-8xpm
Vulnerability from github
Summary
Rack::QueryParser
in version < 2.2.18
enforces its params_limit
only for parameters separated by &
, while still splitting on both &
and ;
. As a result, attackers could use ;
separators to bypass the parameter count limit and submit more parameters than intended.
Details
The issue arises because Rack::QueryParser#check_query_string
counts only &
characters when determining the number of parameters, but the default separator regex DEFAULT_SEP = /[&;] */n
splits on both &
and ;
. This mismatch means that queries using ;
separators were not included in the parameter count, allowing params_limit
to be bypassed.
Other safeguards (bytesize_limit
and key_space_limit
) still applied, but did not prevent this particular bypass.
Impact
Applications or middleware that directly invoke Rack::QueryParser
with its default configuration (no explicit delimiter) could be exposed to increased CPU and memory consumption. This can be abused as a limited denial-of-service vector.
Rack::Request
, the primary entry point for typical Rack applications, uses QueryParser
in a safe way and does not appear vulnerable by default. As such, the severity is considered low, with the impact limited to edge cases where QueryParser
is used directly.
Mitigation
- Upgrade to a patched version of Rack where both
&
and;
are counted consistently towardparams_limit
. - If upgrading is not immediately possible, configure
QueryParser
with an explicit delimiter (e.g.,&
) to avoid the mismatch. - As a general precaution, enforce query string and request size limits at the web server or proxy layer (e.g., Nginx, Apache, or a CDN) to mitigate excessive parsing overhead.
{ "affected": [ { "package": { "ecosystem": "RubyGems", "name": "rack" }, "ranges": [ { "events": [ { "introduced": "0" }, { "fixed": "2.2.18" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2025-59830" ], "database_specific": { "cwe_ids": [ "CWE-400", "CWE-770" ], "github_reviewed": true, "github_reviewed_at": "2025-09-25T16:39:27Z", "nvd_published_at": "2025-09-25T15:16:13Z", "severity": "HIGH" }, "details": "## Summary\n\n`Rack::QueryParser` in version `\u003c 2.2.18` enforces its `params_limit` only for parameters separated by `\u0026`, while still splitting on both `\u0026` and `;`. As a result, attackers could use `;` separators to bypass the parameter count limit and submit more parameters than intended.\n\n## Details\n\nThe issue arises because `Rack::QueryParser#check_query_string` counts only `\u0026` characters when determining the number of parameters, but the default separator regex `DEFAULT_SEP = /[\u0026;] */n` splits on both `\u0026` and `;`. This mismatch means that queries using `;` separators were not included in the parameter count, allowing `params_limit` to be bypassed.\n\nOther safeguards (`bytesize_limit` and `key_space_limit`) still applied, but did not prevent this particular bypass.\n\n## Impact\n\nApplications or middleware that directly invoke `Rack::QueryParser` with its default configuration (no explicit delimiter) could be exposed to increased CPU and memory consumption. This can be abused as a limited denial-of-service vector.\n\n`Rack::Request`, the primary entry point for typical Rack applications, uses `QueryParser` in a safe way and does not appear vulnerable by default. As such, the severity is considered **low**, with the impact limited to edge cases where `QueryParser` is used directly.\n\n## Mitigation\n\n* Upgrade to a patched version of Rack where both `\u0026` and `;` are counted consistently toward `params_limit`.\n* If upgrading is not immediately possible, configure `QueryParser` with an explicit delimiter (e.g., `\u0026`) to avoid the mismatch.\n* As a general precaution, enforce query string and request size limits at the web server or proxy layer (e.g., Nginx, Apache, or a CDN) to mitigate excessive parsing overhead.", "id": "GHSA-625h-95r8-8xpm", "modified": "2025-09-25T16:39:27Z", "published": "2025-09-25T16:39:27Z", "references": [ { "type": "WEB", "url": "https://github.com/rack/rack/security/advisories/GHSA-625h-95r8-8xpm" }, { "type": "ADVISORY", "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-59830" }, { "type": "WEB", "url": "https://github.com/rack/rack/commit/54e4ffdd5affebcb0c015cc6ae74635c0831ed71" }, { "type": "PACKAGE", "url": "https://github.com/rack/rack" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "type": "CVSS_V3" } ], "summary": "Rack has an unsafe default in Rack::QueryParser allows params_limit bypass via semicolon-separated parameters" }
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.