fast-uri

Ecosystem: npm

Downloads: 701.74 Mln

Vulnerabilities from the last (months)
  • 0CriticalAffects 0 versions
  • 11HighAffects 31 versions
  • 0MediumAffects 0 versions
  • 4ModerateAffects 10 versions
  • 2LowAffects 6 versions
Severity distribution (all time)
17vulnerabilities
  • Critical0 (0.0%)
  • High11 (64.7%)
  • Medium0 (0.0%)
  • Moderate4 (23.5%)
  • Low2 (11.8%)

Monthly breakdown

  • Critical
  • High
  • Medium
  • Moderate
  • Low
  • 4 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 2
    • Low: 2
  • 8 vulnerabilities
    • Critical: 0
    • High: 6
    • Medium: 0
    • Moderate: 2
    • Low: 0
  • 1 vulnerabilities
    • Critical: 0
    • High: 1
    • Medium: 0
    • Moderate: 0
    • Low: 0
  • 2 vulnerabilities
    • Critical: 0
    • High: 2
    • Medium: 0
    • Moderate: 0
    • Low: 0
  • 2 vulnerabilities
    • Critical: 0
    • High: 2
    • Medium: 0
    • Moderate: 0
    • Low: 0

Vulnerabilities (17)

Known vulnerabilities affecting fast-uri, based on data from OSV.

Vulnerabilities affecting fast-uri
IDSeveritySummaryAffected versionsPublishedSource
GHSA-333x-w4r6-6crpLowfast-uri vulnerable to scheme injection via an unescaped first-segment colon in suffix references### Impact `fast-uri`'s `serialize()`, `normalize()`, and `resolve()`, when called with the non-default option `reference: 'suffix'` on a reference that has no authority, emit a relative reference whose first path segment contains a bare colon without escaping it. RFC 3986 section 3.3 requires the first segment of a `path-noscheme` reference not to contain a colon, precisely because a bare colon makes the string reparse as an absolute URI with a scheme. `fast-uri`'s default serialization escapes that colon, but the suffix path does not. For example, `normalize('javascript:alert(1)', { refere
  • < 2.4.8
  • >= 3.0.0, < 3.1.9
  • >= 4.0.0, < 4.2.3
GitHub (opens in a new tab)
GHSA-w74x-v6f9-j3xgModeratefast-uri vulnerable to URI scheme spoofing via percent-encoded scheme decoding### Impact `fast-uri` percent-decodes the scheme component with the legacy global `unescape()` before validating it, so an input whose decoded scheme is a valid but dangerous token is emitted as a live scheme. RFC 3986 section 3.1 does not allow percent-encoding in a scheme, so no RFC or WHATWG parser treats such input as having that scheme, but `fast-uri` does. For example, `normalize('%6Aavascript:alert(1)')` returns `javascript:alert(1)`, `resolve('https://a.example/', '%6Aavascript:alert(1)')` returns `javascript:alert(1)`, and `parse('%6Aavascript:alert(1)').scheme` returns `javascript`
  • < 2.4.8
  • >= 3.0.0, < 3.1.9
  • >= 4.0.0, < 4.2.3
GitHub (opens in a new tab)
GHSA-wjr9-j795-jxcrModeratefast-uri vulnerable to host confusion via unchecked WHATWG host canonicalization### 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
  • >= 2.4.2, < 2.4.8
  • >= 3.1.3, < 3.1.9
  • >= 4.0.1, < 4.2.3
GitHub (opens in a new tab)
GHSA-xhq7-xmqj-769hLowfast-uri vulnerable to improper path equivalence in relative reference normalization### Impact `fast-uri`'s `normalize()` and `serialize()` apply RFC 3986 dot-segment removal (`remove_dot_segments`) to the path of a relative-path reference. RFC 3986 section 5.2.4 defines that algorithm only for the merged target path during resolution, not for the reference itself, so applied to the reference it drops leading `..` segments and can turn a document-relative reference into a root-relative one. For example, `normalize('a/../b')` returns `/b` and `normalize('../x')` returns `x`, so `resolve(base, normalize(ref))` points at a different resource than `resolve(base, ref)`, and `equ
  • < 2.4.8
  • >= 3.0.0, < 3.1.9
  • >= 4.0.0, < 4.2.3
GitHub (opens in a new tab)
GHSA-hrr3-gc8f-f4qjModeratefast-uri vulnerable to inconsistent host case normalization via percent-encoded octets### Impact `fast-uri` folds the host to lowercase before it percent-decodes the host, so a percent-encoded uppercase unreserved octet such as `%41` decodes to a literal `A` that is never folded. For a scheme-relative reference (`//host`) there is no scheme, so the host canonicalization that repairs this on a scheme-bearing URL does not run. As a result `parse`, `normalize`, and `equal` disagree on the same host: `parse("//%41.com").host` returns `"A.com"` while `parse("//a.com").host` and `parse("//A.com").host` return `"a.com"`, and `equal("//%41.com", "//a.com")` is `false` even though `equ
  • < 2.4.7
  • >= 3.0.0, < 3.1.8
  • >= 4.0.0, < 4.1.5
GitHub (opens in a new tab)
GHSA-jvvf-x445-j334Moderatefast-uri vulnerable to mailto header injection via percent-encoded field-name desynchronization### Impact `fast-uri`'s `mailto` scheme parser compares each query field name to the reserved names (`to`, `subject`, `body`) while the name is still percent-encoded, and only percent-decodes it when storing it as a generic header. On serialize, the decoded name is re-emitted, so a field name such as `%74o` (percent-encoded `to`) is not recognized as a recipient at parse time (`parse().to` shows only the legitimate recipient) but materializes as a literal `to=` field after `serialize()`, and reparsing then treats it as a recipient. The same technique smuggles `subject` and `body` through `%73
  • >= 4.1.3, < 4.1.5
GitHub (opens in a new tab)
GHSA-58mr-gqgx-xq4gHighfast-uri vulnerable to host confusion via an unclosed bracket in the URI authority### Impact `fast-uri` accepts a host that contains an unbalanced or misplaced authority bracket (`[` or `]`) without reporting an error. A host that starts with `[` but does not end with `]`, such as `[@127.0.0.1`, is neither validated as an IP literal nor canonicalized as a domain name, so `parse()` returns it as the host with `error` undefined, while Node's `URL` (and `http.get`, `axios`, `got`, and other clients built on it) resolve the same string to `127.0.0.1`. An application that reads `parse().host` to make a host decision (an SSRF denylist, a redirect allowlist, or proxy routing) and
  • >= 2.4.5, < 2.4.6
  • >= 3.1.6, < 3.1.7
  • >= 4.1.3, < 4.1.4
GitHub (opens in a new tab)
GHSA-qw65-cvwx-89v3Highfast-uri vulnerable to authority injection via an unvalidated port in serialize### Impact `fast-uri` serializes the `port` component of a URI without validating it. When recomposing the authority, `fast-uri` escapes the userinfo and host components but concatenates the port verbatim, so a `port` value that is not a sequence of digits can inject authority delimiters. For example, serializing a component whose `port` is `@127.0.0.1:8124` produces `http://trusted.example:@127.0.0.1:8124/app`, demoting the intended host to userinfo and pointing the authority at an attacker-controlled host. Both `fast-uri` and Node's `URL` read the result back as the attacker's host with no
  • < 2.4.6
  • >= 3.0.0, < 3.1.7
  • >= 4.0.0, < 4.1.4
GitHub (opens in a new tab)
GHSA-5jgf-p345-68v8Highfast-uri vulnerable to host confusion via skipped IDN canonicalization on scheme-relative references### Impact `fast-uri` canonicalizes a host to its ASCII form only when the input carries an explicit scheme. When `resolve()` resolves a scheme-relative reference (`//host/`) against a scheme-bearing base, it still emits the host verbatim even though the effective scheme is known, so re-parsing the resolved URI yields a different host than the one `resolve()` returned. An application that resolves an untrusted reference with `fast-uri` and then checks or routes on the resulting host can make a policy decision on one host and reach another. This is an incomplete-fix variant of CVE-2026-13676,
  • >= 2.4.2, < 2.4.5
  • >= 3.1.3, < 3.1.6
  • >= 4.0.1, < 4.1.3
GitHub (opens in a new tab)
GHSA-f65p-4m7j-42xcHighfast-uri vulnerable to server-side request forgery via malformed IPv6 normalization### Impact `fast-uri` does not validate the complete RFC 3986 grammar for bracketed IPv6 literals, so a malformed literal with invalid trailing text is silently truncated to a different valid IPv6 address with no error reported. For example, `normalize('http://[::not-valid]/private')` returns `http://[::]/private`, and `[fc00::not-hex]` and `[fe80::not-hex]` collapse to `[fc00::]` and `[fe80::]`. An application that normalizes an untrusted URL before an outbound request, redirect, or host-policy check can be routed to a local or private address such as loopback (`::1`), unique-local, or link-
  • >= 2.3.1, < 2.4.5
  • >= 3.0.0, < 3.1.6
  • >= 4.0.0, < 4.1.3
GitHub (opens in a new tab)
  • GHSA-333x-w4r6-6crpLow
    fast-uri vulnerable to scheme injection via an unescaped first-segment colon in suffix references
    • < 2.4.8
    • >= 3.0.0, < 3.1.9
    • +1 more
    Affected versions:
    • < 2.4.8
    • >= 3.0.0, < 3.1.9
    • >= 4.0.0, < 4.2.3

    ### Impact `fast-uri`'s `serialize()`, `normalize()`, and `resolve()`, when called with the non-default option `reference: 'suffix'` on a reference that has no authority, emit a relative reference whose first path segment contains a bare colon without escaping it. RFC 3986 section 3.3 requires the first segment of a `path-noscheme` reference not to contain a colon, precisely because a bare colon makes the string reparse as an absolute URI with a scheme. `fast-uri`'s default serialization escapes that colon, but the suffix path does not. For example, `normalize('javascript:alert(1)', { refere

    CVE: CVE-2026-110725

  • GHSA-w74x-v6f9-j3xgModerate
    fast-uri vulnerable to URI scheme spoofing via percent-encoded scheme decoding
    • < 2.4.8
    • >= 3.0.0, < 3.1.9
    • +1 more
    Affected versions:
    • < 2.4.8
    • >= 3.0.0, < 3.1.9
    • >= 4.0.0, < 4.2.3

    ### Impact `fast-uri` percent-decodes the scheme component with the legacy global `unescape()` before validating it, so an input whose decoded scheme is a valid but dangerous token is emitted as a live scheme. RFC 3986 section 3.1 does not allow percent-encoding in a scheme, so no RFC or WHATWG parser treats such input as having that scheme, but `fast-uri` does. For example, `normalize('%6Aavascript:alert(1)')` returns `javascript:alert(1)`, `resolve('https://a.example/', '%6Aavascript:alert(1)')` returns `javascript:alert(1)`, and `parse('%6Aavascript:alert(1)').scheme` returns `javascript`

    CVE: CVE-2026-110306

  • GHSA-wjr9-j795-jxcrModerate
    fast-uri vulnerable to host confusion via unchecked WHATWG host canonicalization
    • >= 2.4.2, < 2.4.8
    • >= 3.1.3, < 3.1.9
    • +1 more
    Affected versions:
    • >= 2.4.2, < 2.4.8
    • >= 3.1.3, < 3.1.9
    • >= 4.0.1, < 4.2.3

    ### 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

    CVE: CVE-2026-110180

  • GHSA-xhq7-xmqj-769hLow
    fast-uri vulnerable to improper path equivalence in relative reference normalization
    • < 2.4.8
    • >= 3.0.0, < 3.1.9
    • +1 more
    Affected versions:
    • < 2.4.8
    • >= 3.0.0, < 3.1.9
    • >= 4.0.0, < 4.2.3

    ### Impact `fast-uri`'s `normalize()` and `serialize()` apply RFC 3986 dot-segment removal (`remove_dot_segments`) to the path of a relative-path reference. RFC 3986 section 5.2.4 defines that algorithm only for the merged target path during resolution, not for the reference itself, so applied to the reference it drops leading `..` segments and can turn a document-relative reference into a root-relative one. For example, `normalize('a/../b')` returns `/b` and `normalize('../x')` returns `x`, so `resolve(base, normalize(ref))` points at a different resource than `resolve(base, ref)`, and `equ

    CVE: CVE-2026-110095

  • GHSA-hrr3-gc8f-f4qjModerate
    fast-uri vulnerable to inconsistent host case normalization via percent-encoded octets
    • < 2.4.7
    • >= 3.0.0, < 3.1.8
    • +1 more
    Affected versions:
    • < 2.4.7
    • >= 3.0.0, < 3.1.8
    • >= 4.0.0, < 4.1.5

    ### Impact `fast-uri` folds the host to lowercase before it percent-decodes the host, so a percent-encoded uppercase unreserved octet such as `%41` decodes to a literal `A` that is never folded. For a scheme-relative reference (`//host`) there is no scheme, so the host canonicalization that repairs this on a scheme-bearing URL does not run. As a result `parse`, `normalize`, and `equal` disagree on the same host: `parse("//%41.com").host` returns `"A.com"` while `parse("//a.com").host` and `parse("//A.com").host` return `"a.com"`, and `equal("//%41.com", "//a.com")` is `false` even though `equ

    CVE: CVE-2026-86472

  • GHSA-jvvf-x445-j334Moderate
    fast-uri vulnerable to mailto header injection via percent-encoded field-name desynchronization
    • >= 4.1.3, < 4.1.5

    ### Impact `fast-uri`'s `mailto` scheme parser compares each query field name to the reserved names (`to`, `subject`, `body`) while the name is still percent-encoded, and only percent-decodes it when storing it as a generic header. On serialize, the decoded name is re-emitted, so a field name such as `%74o` (percent-encoded `to`) is not recognized as a recipient at parse time (`parse().to` shows only the legitimate recipient) but materializes as a literal `to=` field after `serialize()`, and reparsing then treats it as a recipient. The same technique smuggles `subject` and `body` through `%73

    CVE: CVE-2026-86818

  • GHSA-58mr-gqgx-xq4gHigh
    fast-uri vulnerable to host confusion via an unclosed bracket in the URI authority
    • >= 2.4.5, < 2.4.6
    • >= 3.1.6, < 3.1.7
    • +1 more
    Affected versions:
    • >= 2.4.5, < 2.4.6
    • >= 3.1.6, < 3.1.7
    • >= 4.1.3, < 4.1.4

    ### Impact `fast-uri` accepts a host that contains an unbalanced or misplaced authority bracket (`[` or `]`) without reporting an error. A host that starts with `[` but does not end with `]`, such as `[@127.0.0.1`, is neither validated as an IP literal nor canonicalized as a domain name, so `parse()` returns it as the host with `error` undefined, while Node's `URL` (and `http.get`, `axios`, `got`, and other clients built on it) resolve the same string to `127.0.0.1`. An application that reads `parse().host` to make a host decision (an SSRF denylist, a redirect allowlist, or proxy routing) and

    CVE: CVE-2026-84394

  • GHSA-qw65-cvwx-89v3High
    fast-uri vulnerable to authority injection via an unvalidated port in serialize
    • < 2.4.6
    • >= 3.0.0, < 3.1.7
    • +1 more
    Affected versions:
    • < 2.4.6
    • >= 3.0.0, < 3.1.7
    • >= 4.0.0, < 4.1.4

    ### Impact `fast-uri` serializes the `port` component of a URI without validating it. When recomposing the authority, `fast-uri` escapes the userinfo and host components but concatenates the port verbatim, so a `port` value that is not a sequence of digits can inject authority delimiters. For example, serializing a component whose `port` is `@127.0.0.1:8124` produces `http://trusted.example:@127.0.0.1:8124/app`, demoting the intended host to userinfo and pointing the authority at an attacker-controlled host. Both `fast-uri` and Node's `URL` read the result back as the attacker's host with no

    CVE: CVE-2026-84292

  • GHSA-5jgf-p345-68v8High
    fast-uri vulnerable to host confusion via skipped IDN canonicalization on scheme-relative references
    • >= 2.4.2, < 2.4.5
    • >= 3.1.3, < 3.1.6
    • +1 more
    Affected versions:
    • >= 2.4.2, < 2.4.5
    • >= 3.1.3, < 3.1.6
    • >= 4.0.1, < 4.1.3

    ### Impact `fast-uri` canonicalizes a host to its ASCII form only when the input carries an explicit scheme. When `resolve()` resolves a scheme-relative reference (`//host/`) against a scheme-bearing base, it still emits the host verbatim even though the effective scheme is known, so re-parsing the resolved URI yields a different host than the one `resolve()` returned. An application that resolves an untrusted reference with `fast-uri` and then checks or routes on the resulting host can make a policy decision on one host and reach another. This is an incomplete-fix variant of CVE-2026-13676,

    CVE: CVE-2026-75931

  • GHSA-f65p-4m7j-42xcHigh
    fast-uri vulnerable to server-side request forgery via malformed IPv6 normalization
    • >= 2.3.1, < 2.4.5
    • >= 3.0.0, < 3.1.6
    • +1 more
    Affected versions:
    • >= 2.3.1, < 2.4.5
    • >= 3.0.0, < 3.1.6
    • >= 4.0.0, < 4.1.3

    ### Impact `fast-uri` does not validate the complete RFC 3986 grammar for bracketed IPv6 literals, so a malformed literal with invalid trailing text is silently truncated to a different valid IPv6 address with no error reported. For example, `normalize('http://[::not-valid]/private')` returns `http://[::]/private`, and `[fc00::not-hex]` and `[fe80::not-hex]` collapse to `[fc00::]` and `[fe80::]`. An application that normalizes an untrusted URL before an outbound request, redirect, or host-policy check can be routed to a local or private address such as loopback (`::1`), unique-local, or link-

    CVE: CVE-2026-75975

Showing 1-10 of 17 vulnerabilities