CVE-2026-126351: Addressable · Denial of service in URI path normalization
Affects mikutterSource GCVE Database
Not known to be exploited · CVSS 5.9 Medium · fixed in 2.9.1 : update mikutter when convenient.
Data as of 13 Nov 2026, 21:02 UTC
Thin evidence
One scorer or none| CNA (GitHub_M) | CVSS 3.1 | 5.9 |
|---|
- Patch
- Available – fixed in 2.9.1
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:HExploitation evidence
Disclosed: evidence found.
CVE published 12 Nov 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponized: no evidence on record.
No public exploit code indexed in Metasploit or Exploit-DB
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 13 Nov 2026.
What to do
Affected software
| Product | Affected | Fixed in |
|---|---|---|
Homebrewmikutterpkg:brew/mikutterOther threats | Affected
| Fixed in– |
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
Description
### Impact `Addressable::URI.normalize_path` takes time quadratic in the number of nested dot segments in a path (e.g., `"/" + "a/" * n + "../" * n`, which for n = 3 is `/a/a/a/../../../`), because it removes one dot segment per pass over the whole path. `URI#normalize`, `URI#normalized_path`, `URI#==`, `URI#===` and `URI#join` all call it. Normalizing, comparing or joining a URI taken from user input can result in uncontrolled resource consumption, leading to denial of service. On 2.9.0, normalizing a 34 KB path takes about 3.5 seconds on MRI Ruby 4.0, and the cost grows with the square of the path length. This affects every Ruby implementation, including MRI Ruby 3.2 and later. `URI.parse` by itself is unaffected, as is code that never normalizes, compares, or joins URIs from untrusted sources. ### Affected Versions This vulnerability affects all versions of Addressable prior to 2.9.1. It is fixed in 2.9.1. ### Workarounds - Limit the length of URIs taken from user input before calling `normalize`, `==` or `join` on them. Web servers often limit request lines to about 8 KB, which keeps the cost to about 150 milliseconds per call on typical hardware, but URIs from other sources (request bodies, headers such as `Location`, stored data) may not be limited. - Reject paths with many dot segments before normalizing them. ### Credits Reported by Matthew Mongeau (@halogenandtoast), Ruby Central Gem Security, who also suggested the single-pass approach used in the fix. ### For more information If there are any questions or comments about this advisory: * [Open an issue](https://github.com/sporkmonger/addressable/issues)
References
- github.com/sporkmonger/addressable/security/advisories/GHSA-qq38-m9mg-xjj5 (opens in a new tab)
- github.com/sporkmonger/addressable/commit/25c7c412a2f7e06c3cac92872e831f6d053703c5 (opens in a new tab)
- github.com/rubysec/ruby-advisory-db/blob/master/gems/addressable/GHSA-qq38-m9mg-xjj5.yml (opens in a new tab)
- github.com/sporkmonger/addressable (opens in a new tab)
- github.com/sporkmonger/addressable/releases/tag/addressable-2.9.1 (opens in a new tab)