Summary
CVE-2026-86253 is a path traversal vulnerability (CWE-22) in the serveStatic() function of h3, a minimal HTTP framework for Node.js published as the h3 npm package (org: h3js). The flaw allows an unauthenticated remote attacker to read arbitrary files from the underlying server filesystem by sending percent-encoded directory-traversal sequences in the request path. It has been assigned a CVSS score of 8.2 (High).
Technical details
- Root cause: On Node.js, h3 relies on srvx’s
FastURLclass for URL parsing. Unlike standard WHATWG URL parsing,FastURLperforms raw string slicing for performance and does not normalize dot segments (./..) or resolve percent-encoded equivalents (%2e). - Trigger:
event.url.pathnameis not normalized before being handled byserveStatic(). The unnormalized path is subsequently passed todecodeURI(), which decodes%2e%2esequences into literal../segments without any further sanitization. - Attack vector: Network — a remote, unauthenticated attacker can send a crafted HTTP GET request containing chained percent-encoded dot-segments (e.g.
GET /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd) to any endpoint served viaserveStatic(). - Impact: Successful exploitation allows disclosure of arbitrary files outside the intended static-file directory, including system files (e.g.
/etc/passwd), environment variable files, application configuration, credentials/API keys, and source code. No user interaction or privileges are required. Only confidentiality is impacted — there is no reported integrity or availability impact.
Affected software
- h3 (npm package, h3js): all versions before 1.15.6
- h3 (npm package, h3js): all versions from 2.0.0-beta.0 before 2.0.1-rc.15
Severity
- CVSS v3.1 Base Score: 5.9 (Moderate) —
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - CVSS v4.0 Score: 8.2 (High) —
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Mitigation and recommended actions
- Immediate: Upgrade the
h3npm package to 1.15.6 or later (for the 1.x line) or 2.0.1-rc.15 or later (for the 2.x pre-release line). These versions correctly normalize percent-encoded dot segments before path resolution inserveStatic(). - If immediate patching is not possible:
- Avoid exposing
serveStatic()(or any static-file-serving route built on it) to untrusted network traffic until patched. - Deploy a reverse proxy or WAF rule that blocks/normalizes requests containing percent-encoded traversal sequences (
%2e%2e,%252e, etc.) before they reach the application. - Run the application under a restricted filesystem user/container with least-privilege access to reduce the blast radius of any file read.
- Audit access logs for suspicious request paths containing repeated
%2e%2eor../sequences targeting sensitive files.
- Avoid exposing

