CVE-2024-25126: Rack vulnerable to ReDoS in content type parsing (2nd degree polynomial)
(updated )
Summary
module Rack
class MediaType
SPLIT_PATTERN = %r{\s*[;,]\s*}
The above regexp is subject to ReDos. 50K blank characters as a prefix to the header will take over 10s to split.
PoC
A simple HTTP request with lots of blank characters in the content-type header:
request["Content-Type"] = (" " * 50_000) + "a,"
Impact
It’s a very easy to craft ReDoS. Like all ReDoS the impact is debatable.
References
- discuss.rubyonrails.org/t/denial-of-service-vulnerability-in-rack-content-type-parsing/84941
- github.com/advisories/GHSA-22f2-v57c-j9cx
- github.com/rack/rack
- github.com/rack/rack/commit/6efb2ceea003c4b195815a614e00438cbd543462
- github.com/rack/rack/commit/d9c163a443b8cadf4711d84bd2c58cb9ef89cf49
- github.com/rack/rack/security/advisories/GHSA-22f2-v57c-j9cx
- github.com/rubysec/ruby-advisory-db/blob/master/gems/rack/CVE-2024-25126.yml
- nvd.nist.gov/vuln/detail/CVE-2024-25126
Code Behaviors & Features
Detect and mitigate CVE-2024-25126 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →