CVE-2026-86251
moderatePath Traversal in h3 serveStatic via Double-Encoding (CDN/S3 Backends)
h3 before version 1.15.9 contains a path traversal vulnerability (CWE-22) in its serveStatic utility, caused by a double-decoding flaw in request-path handling. A request path containing double-encoded dot sequences such as %252e%252e is decoded to %2e%2e, which survives h3's resolveDotSegments() because that function only checks for literal '.' characters; when the resulting asset ID is then resolved by URL-based backends such as a CDN, S3, or other object storage, %2e%2e is interpreted as '..' per RFC 3986, enabling traversal outside the intended asset root. An unauthenticated remote attacker can thereby read arbitrary files from the backend storage, with high confidentiality impact and no integrity or availability impact per the CVSS 4.0 vector. Users of h3's serveStatic feature, particularly deployments serving static assets from URL-based (CDN/S3/object-storage) backends, are affected, and the fix is in version 1.15.9. There are no known public proofs of concept, no reports of exploitation in the wild, the flaw is not in CISA's KEV, and EPSS estimates only a 0.3% probability of exploitation in the next 30 days.
What to do: Upgrade h3 to version 1.15.9 or later. Audit whether your deployment uses serveStatic backed by CDN, S3, or other object storage, review backend access logs for requests containing double-encoded dot sequences, and as an interim mitigation normalize or block double-encoded dot sequences at the proxy/WAF layer.
| UnJS h3 (Node.js HTTP framework) | < 1.15.9 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
h3 versions before 1.15.9 contain a path traversal vulnerability in the serveStatic utility. A double-decoding flaw allows a request path containing double-encoded dot sequences (e.g. %252e%252e) to be decoded to %2e%2e, which survives resolveDotSegments() because that function only checks for literal '.' characters. When the resulting asset ID is resolved by URL-based backends (CDN, S3, object storage), %2e%2e is interpreted as '..' per RFC 3986, enabling path traversal to read arbitrary files from the backend.
- Weakness
- CWE-22
- 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
In the news0 stories
No ingested article mentions this CVE yet.