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
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. Learn more about Dependency Scanning →