GHSA-333x-w4r6-6crp: Low severity npm/fast-uri vulnerability
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)', { reference: 'suffix' }) returns javascript:alert(1), which reparses as a live javascript: scheme; data: and vbscript: behave the same.
Applications that serialize or normalize a relative reference with reference: 'suffix' and then treat the result as a URI can turn inert input into a live javascript:, data:, or vbscript: URL (a cross-site scripting vector), and equal() can conflate a scheme-bearing reference with a relative one. Exposure is limited to applications that use the non-default reference: 'suffix' option.
Patches
Upgrade to fast-uri 2.4.8, 3.1.9, or 4.2.3.
Workarounds
Do not use the reference: 'suffix' option on untrusted input. If suffix output is required, percent-encode a colon in the first path segment of the result before treating it as a URI.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/fast-urito a version that resolves this vulnerability.Fixed in 4.2.3 - Upgrade
Upgrade
npm/fast-urito a version that resolves this vulnerability.Fixed in 3.1.9 - Upgrade
Upgrade
npm/fast-urito a version that resolves this vulnerability.Fixed in 2.4.8 - Upgrade
Upgrade
fast-urito a version that resolves this vulnerability.Fixed in 2.4.8 - Configuration
Do not use the reference: 'suffix' option on untrusted input.
fast-uri reference = not 'suffix' - Compensating control
If suffix output is required, percent-encode a colon in the first path segment before treating the result as a URI.
Event History
Frequently Asked Questions
Are applications using fast-uri with its default settings affected?
Exposure is limited to applications that use the non-default reference: 'suffix' option. The default serialization behavior escapes the colon in the first path segment.
What conditions are required for exploitation?
An application must serialize, normalize, or resolve a reference with reference: 'suffix' and then treat the resulting string as a URI. A crafted relative reference can then reparse as a javascript:, data:, or vbscript: URL, creating a potential cross-site scripting vector.
Which versions contain fixes?
Upgrade fast-uri to version 2.4.8, 3.1.9, or 4.2.3.
Is there a related risk when comparing URI references?
Yes. The advisory states that equal() can conflate a scheme-bearing reference with a relative reference. Review uses of equal() where this distinction affects URL validation or security decisions.