---
id: "CVE-2026-110095"
kind: "vulnerability"
aliases: ["CVE-2026-110095", "GHSA-xhq7-xmqj-769h"]
title: "fast-uri vulnerable to improper path equivalence in relative reference normalization"
severity: "low"
cvss: 3.7
epss: 0.00232
exploited: false
status: "open"
category: "package"
products: [{"name": "fast-uri", "fixed": ["2.4.8"], "affected": "< 2.4.8", "ecosystem": "npm"}, {"name": "fast-uri", "fixed": ["3.1.9"], "affected": ">= 3.0.0, < 3.1.9", "ecosystem": "npm"}, {"name": "fast-uri", "fixed": ["4.2.3"], "affected": ">= 4.0.0, < 4.2.3", "ecosystem": "npm"}]
ecosystems: ["npm"]
tags: ["cwe-41", "fast-uri", "node", "npm", "package"]
not_affected_if: ["no-relative-reference-normalization", "uses-fixed-version"]
published_at: "2026-10-20T07:17:08+00:00"
first_seen_at: "2026-10-23T21:39:59+00:00"
updated_at: "2026-10-23T21:57:20+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-xhq7-xmqj-769h", "first_seen_at": "2026-10-23T21:39:59+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-110095", "first_seen_at": "2026-10-23T21:57:20+00:00"}]
---

# fast-uri vulnerable to improper path equivalence in relative reference normalization

fast-uri's normalize() and serialize() wrongly strip leading ../ segments from relative references, changing what the reference points to. An attacker who controls a relative reference that the app normalizes before resolving can make it reach a different resource than intended.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- npm:fast-uri affected < 2.4.8 fixed 2.4.8
- npm:fast-uri affected >= 3.0.0, < 3.1.9 fixed 3.1.9
- npm:fast-uri affected >= 4.0.0, < 4.2.3 fixed 4.2.3

## How to check

Run npm ls fast-uri to see installed versions and check if any is below 2.4.8, 3.1.9, or 4.2.3.

## Fix

Upgrade fast-uri to 2.4.8, 3.1.9, or 4.2.3 depending on the major line in use.
Until patched, resolve relative references against the absolute base before normalizing.

## Timeline

- 2026-10-23T21:39:59+00:00 ghsa https://github.com/advisories/GHSA-xhq7-xmqj-769h
- 2026-10-23T21:57:20+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-110095

## From the sources

### 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 `equal()` treats distinct references as the same.

Applications that normalize attacker-supplied or user-supplied relative references and then resolve them, or use them as cache, deduplication, or authorization keys, can have a reference escape its intended directory and point at a different resource.

### Patches

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

### Workarounds

Do not normalize a relative reference before resolving it. Resolve it against the absolute base first, then normalize the absolute result.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
