All vulnerabilities
CVE-2026-110180GHSA-wjr9-j795-jxcr

fast-uri vulnerable to host confusion via unchecked WHATWG host canonicalization

fast-uri fast-urinpmLibraries & packages
CVSS
4.8Medium
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.21%Chance of exploitation activity in the next 30 days, higher than 10% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in2.4.8Also 3.1.9, 4.2.3GitHub
Published20 Oct 2026Updated 23 Oct 2026CVE List

What fixes it

  • 2.4.8fast-uri, npmGitHubnpm install fast-uri@2.4.8
  • 3.1.9fast-uri, npmGitHubnpm install fast-uri@3.1.9
  • 4.2.3fast-uri, npmGitHubnpm install fast-uri@4.2.3
  • 2.4.8fast-uriCVE List
  • 3.1.9fast-uriCVE List
  • 4.2.3fast-uriCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

Impact

fast-uri versions >= 2.4.2, <= 2.4.7, >= 3.1.3, <= 3.1.8, and >= 4.0.1, <= 4.2.2 can silently rewrite the host of an HTTP-family URL (http, https, ws, wss, or any scheme with domainHost: true). For those schemes canonicalizeHost() passes the parsed host to the WHATWG URL parser and adopts its .hostname without checking that the parser read the whole input as a host. RFC 3986 permits @ inside the host group and the WHATWG parser strips TAB, LF, and CR, so the authority fast-uri reports is rewritten by that second parser with no error set: data before an @ is dropped and whitespace is removed.

For example, fast-uri parses http://a@b@evil.example/ to host evil.example (dropping the b segment), and a host containing a raw TAB, CR, or LF has those characters stripped. equal() then treats a whitespace-smuggled host as the same as the clean one, and resolve() rewrites the authority the same way.

Applications that use fast-uri to enforce host-based policy (denylists, loopback filtering, redirect validation, outbound proxy routing) on one representation, such as the raw input, see a policy/use desync: the canonical host fast-uri returns differs from what was checked, and traffic can be steered to an unintended destination.

Patches

Upgrade to fast-uri 2.4.8, 3.1.9, or 4.2.3.

Workarounds

Reject URIs whose authority contains more than one @, or contains TAB, CR, or LF, before calling fast-uri. Alternatively, treat any non-empty parse(x).error as fatal, and compare hosts only from the same parse() result.

Text from GitHub Advisory Database

Affected versions 12

  • fast-uri, npm>= 2.4.2, < 2.4.8GitHub
  • fast-uri, npm>= 3.1.3, < 3.1.9GitHub
  • fast-uri, npm>= 4.0.1, < 4.2.3GitHub
  • fast-uriaffected: 2.4.2 before 2.4.8CVE List
  • fast-uriunaffected: 2.4.8CVE List
  • fast-uriaffected: 3.1.3 before 3.1.9CVE List
  • fast-uriunaffected: 3.1.9CVE List
  • fast-uriaffected: 4.0.1 before 4.2.3CVE List
  • fast-uriunaffected: 4.2.3CVE List
  • fast-uri, npmfrom 2.4.2, fixed in 2.4.8OSV
  • fast-uri, npmfrom 3.1.3, fixed in 3.1.9OSV
  • fast-uri, npmfrom 4.0.1, fixed in 4.2.3OSV

References 10