CVE-2026-86251: h3 serveStatic path traversal via double-encoded dot segments

CVE-2026-86251 · Severity: medium · CVSS 5.9 · Published 2026-09-06

h3's serveStatic utility, used to serve static assets from web servers and CDNs, contains a path traversal vulnerability that allows attackers to bypass security checks and read arbitrary files. An attacker can craft requests with double-encoded paths (e.g., `%252e%252e`) that survive validation but are later decoded by backend systems (CDNs, S3, object storage), enabling unauthorized access to sensitive files outside the intended asset directory.

Technologies: h3 (npm). Vendors: npm.

Quick answers

Is CVE-2026-86251 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-86251 being exploited in the wild.
How severe is CVE-2026-86251?
Medium severity, with a CVSS score of 5.9, published 6 September 2026.
Which products and versions are affected?
h3 (npm) SEMVER:introduced=0,fixed=1.15.9.
Is there a fix for CVE-2026-86251?
Yes. h3 (npm): upgrade to 1.15.9 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-86251 attacked?
It is attacked over the network.
Am I affected by CVE-2026-86251?
Check whether you run h3 (npm) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • h3 (npm): upgrade to 1.15.9 or later
    npm install h3@1.15.9

Technical details

The vulnerability stems from conflicting decode stages in h3's static file serving. When `serveStatic` processes a URL like `/%252e%252e/etc/passwd`, the H3Event constructor first decodes it to `/%2e%2e/etc/passwd` (preserving %25 sequences). A second redundant `decodeURI()` call in serveStatic does not further decode `%2e` (since encodeURI never encodes the dot character), leaving `%2e%2e` intact. The `resolveDotSegments()` function only checks for literal `.` characters and fast-returns without traversal protection. URL-based backends (CDNs, S3) then interpret `%2e%2e` as `..` per RFC 3986/URL Standard, enabling path traversal. Affected versions: h3 ≤ 1.15.8. Patched in 1.15.9. Only URL-based backends are vulnerable; filesystem-based backends are not affected.

Affected products

  • h3js h3 ≤ 1.15.8

Identifiers

  • CVE-2026-86251
  • GHSA-72gr-qfp7-vwhw

Timeline

  • 2026-03-20: disclosed
  • 2026-03-20: patched: Version 1.15.9 released

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.