Skip to content
Noroxi
CVE-2026-86253· NVD / CVE Program· CNA VulnCheck

h3 before 1.15.6 Path Traversal via Percent-Encoded Dot Segments

h3 (npm package) versions <= 2.0.1-rc.14 contain a path traversal vulnerability in serveStatic(). On Node.js deployments, event.url.pathname is not normalized, so percent-encoded dot segments (%2e%2e) are passed to decodeURI() and decoded to ../ sequences without sanitization. An unauthenticated remote attacker can send crafted requests to endpoints served by serveStatic() to read arbitrary files outside the intended static directory. Fixed in 1.15.6 and 2.0.1-rc.15.

HighCVSS 8.2 · v4.0—No exploit Fix available
Published
Sep 6, 2026
Updated
Sep 10, 2026
EPSS
0.6% · 48th percentile
Follow this CVE

Sign in to follow · You’ll be notified if a followed record enters KEV, gets an exploit or is updated.

Report tools

JSON

Action score

32

Monitor

Low priority for now.

CVSS
32 / 40 · 8.2 / 10
CISA KEV
0 / 30 · Not listed
EPSS
0 / 30 · 0.6%

CISA SSVC decision

Exploitation
none
Automatable
no
Technical impact
partial

Vulnrichment: CISA's decision-tree inputs.

CNA vs NVD score

NVD
—
CNA · VulnCheck
8.2
NVD has not scored this yet; the score shown is the CNA’s.

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

The score given by the assigning authority versus NVD’s independent score. A gap means the severity is contested.

Affected systems

—

Versions reported by the vendor

Affected version ranges reported by the assigning authority (VulnCheck). Independent of NVD's CPE analysis and usually ahead of it.

  • h3js h3

    • 1.15.6, 2.0.1-rc.15not affected
    • before 1.15.6affected · semver
    • 2.0.0-beta.0 and later · before 2.0.1-rc.15affected · semver

Package-level exposure

OSV and GitHub Advisory data: ecosystem, package and range. SBOM matching uses this table.

EcosystemPackageAffected rangeFix
npmh3from 2.0.0 · before 2.0.1-rc.152.0.1-rc.15
npmh3before 1.15.61.15.6

Same product

h3js: all records

Other highest-scoring records for the same primary product.

  • CVE-2026-86250h3 before 2.0.1-rc.18 Denial of Service via Unbounded Chunked Cookie
    34Monitor
  • CVE-2026-86251h3 before 1.15.9 Path Traversal via Double Decoding
    32Monitor
  • CVE-2026-86252h3 before 1.15.9 SSE Event Injection via Carriage Return
    27Monitor
  • CVE-2026-86205h3 before 2.0.1-rc.18 Open Redirect via redirectBack()
    21Monitor

Remediation

Which version to upgrade to

Fix versions compiled from the vendor, package registries and Microsoft. Verify the vendor's note before upgrading.

Product / packageFixed versionSource
h3js h31.15.6Vendor (CNA)
h3js h32.0.1-rc.15Vendor (CNA)
npm:h31.15.6Package registry (OSV)
npm:h32.0.1-rc.15Package registry (OSV)

Exploit status

No known public exploit

No public exploit has been observed yet. That doesn't mean you're safe, only that the bar is a little higher.

Research context

For pentesters and researchers: attack profile, score disagreement, timeline, patch commits, credits, variant and chain candidates, bug bounty scope. All derived from existing data; no exploit code.

Timeline

From publication to today: proof of concept, Metasploit module, CISA KEV and fix record. Dates are as reported by the sources.

No dated events beyond publication.

EPSS, last 120 days

FIRST EPSS daily score; only changes of 0.01 or more are recorded (step chart).

Patch and commit links

Commit, PR and diff links among the references. A starting point for patch-diffing and variant hunting; fixes, not exploits.

No commit or PR link among the references.

Finders, reporters and analysts named in the CNA record. Click a name for that researcher’s other records.

Variant candidates

Same product, same weakness class, within 18 months. If the patch missed the root cause, the sibling bug is here.

  • CVE-2026-862510 days aparth3 before 1.15.9 Path Traversal via Double Decoding
    32Monitor

Chain candidates

An authentication bypass and a privilege-requiring bug in the same product, published close together: combined they may become an unauthenticated path.

—

Bug bounty scope

No known public program.

Source: bounty-targets-data (public HackerOne, Bugcrowd, Intigriti, YesWeHack listings).

Technical details

Attack conditions

  • Anyone who can reach it over the internet can trigger it.
  • No account or password is required.
  • No user action is required.
  • Special conditions such as timing or configuration are required.

If successful

Confidentiality
Integrity
Availability
Attack vector
Network
Attack complexity
High
Privileges required
None
User interaction
None
Scope
X

CVSS vector

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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

nvd-secondary

Root cause

A user-supplied file name is joined with the allowed directory, but the result is never checked to confirm it is still inside that directory.

A representative example of this vulnerability class. Not the vendor's source code; it shows the faulty pattern and its fix.

Vulnerable

ts
const file = path.join(ROOT, req.query.name);res.sendFile(file);

Fixed

ts
const file = path.resolve(ROOT, req.query.name);if (!file.startsWith(ROOT + path.sep)) {  return res.sendStatus(400);}res.sendFile(file);

Noroxi analysis

No Noroxi analysis for this record yet

We don't hand-write analysis for all 385,000+ vulnerabilities; that wouldn't be honest. For notable, high-impact vulnerabilities our team writes the mechanism, detection and remediation steps.

We use this product, ask for help

Change log

  1. Fix✗ → ✓

For records you follow, these changes also arrive as notifications. →

References

All records