fast-uri vulnerable to host confusion via unchecked WHATWG host canonicalization
What fixes it
- 2.4.8fast-uri, npmGitHub
npm install fast-uri@2.4.8 - 3.1.9fast-uri, npmGitHub
npm install fast-uri@3.1.9 - 4.2.3fast-uri, npmGitHub
npm 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
- github.com/fastify/fast-uri/commit/58c183d0b168ad87f98773266444ce1f6375803aFixvia GitHub
- github.com/fastify/fast-uri/commit/ddfc6a51122dfce0365655f04479fc3adb7f6b3cFixvia GitHub
- github.com/fastify/fast-uri/commit/f6d46dfeab025d0c440485f4ae29fa4f14707646Fixvia GitHub
- github.com/fastify/fast-uri/releases/tag/v2.4.8Fixvia GitHub
- github.com/fastify/fast-uri/releases/tag/v3.1.9Fixvia GitHub
- github.com/fastify/fast-uri/releases/tag/v4.2.3Fixvia GitHub
- github.com/fastify/fast-uri/security/advisories/GHSA-wjr9-j795-jxcrAdvisoryvia CVE List
- cna.openjsf.org/security-advisories.htmlAdvisoryvia CVE List
- github.com/advisories/GHSA-wjr9-j795-jxcrAdvisoryvia GitHub
- nvd.nist.gov/vuln/detail/CVE-2026-110180Referencevia GitHub