Skip to main content

@fastify/http-proxy EUVDEUVD-2026-45379

| CVE-2026-16117 CRITICAL
Improper Input Validation (CWE-20)
2026-07-18 openjs
10.0
CVSS 3.1 · Vendor: openjs
Share

Severity by source

Vendor (openjs) PRIMARY
10.0 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
vuln.today AI
9.3 CRITICAL

Remote unauthenticated encoding trick (AV:N/AC:L/PR:N/UI:N) bypasses the proxy to a separate upstream (S:C); confidentiality High via exposed endpoints, integrity only Low since state change depends on which upstream endpoints are reachable.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N

Primary rating from Vendor (openjs).

CVSS VectorVendor: openjs

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

3
Patch available
Jul 18, 2026 - 15:17 EUVD
Analysis Generated
Jul 18, 2026 - 14:06 vuln.today
CVE Published
Jul 18, 2026 - 13:08 cve.org
CRITICAL 10.0

DescriptionCVE.org

Impact: @fastify/http-proxy versions up to and including 11.5.0 fail to rewrite the request prefix when the prefix segment is URL-encoded. Fastify's router URL-decodes paths for route matching, but request.url retains the original encoded form, and the prefix-rewrite step uses a literal string replace against the decoded prefix. A request that encodes one or more characters of the configured prefix therefore matches the route but skips the rewrite, so the raw encoded path is forwarded to the upstream unchanged. The upstream then decodes the path and serves it, letting an attacker reach upstream paths that the proxy was configured to hide via rewritePrefix, including internal or administrative endpoints.

Patches: upgrade to @fastify/http-proxy 11.6.0.

Workarounds: none.

AnalysisAI

Proxy prefix-rewrite bypass in @fastify/http-proxy (versions up to and including 11.5.0) lets remote unauthenticated attackers reach upstream endpoints the proxy was configured to hide. Because Fastify's router URL-decodes paths for route matching while the rewrite step performs a literal string replace against the decoded prefix, a request that URL-encodes any character of the configured prefix still matches the route but skips the rewrite, forwarding the raw encoded path to the upstream, which decodes and serves it. There is no public exploit identified at time of analysis, but the CVSS 3.1 base score is 10.0 (scope-changed) and the OpenJS/GHSA advisory characterizes it as an information-disclosure access-control bypass.

Technical ContextAI

The affected component is @fastify/http-proxy, a Fastify plugin that reverse-proxies incoming requests to an upstream, typically using the prefix/rewritePrefix options to expose an internal service under a public path while stripping or rewriting that path segment before forwarding. The root cause is CWE-20 (Improper Input Validation): two different representations of the request path are used inconsistently. Fastify's router normalizes and URL-decodes the incoming path for route matching, so an encoded prefix such as /admi%6e still matches the configured route, but request.url retains the original percent-encoded form. The plugin's prefix-rewrite logic uses a plain literal string replacement against the decoded prefix value; when the incoming URL is encoded it does not textually match, the replacement silently no-ops, and the untouched encoded path is forwarded upstream. The upstream server then performs its own URL-decoding and serves the fully-decoded path, defeating the segment-hiding that rewritePrefix was intended to enforce. The CPE cpe:2.3:a:@fastify/http-proxy:@fastify/http-proxy:*:*:* identifies the plugin itself as the affected product across all versions prior to the fix.

RemediationAI

Vendor-released patch: upgrade @fastify/http-proxy to 11.6.0 or later, which corrects the prefix-rewrite logic so encoded prefixes are handled consistently; this is the primary and recommended fix. The advisory states there are no official workarounds, so if immediate upgrade is impossible, apply compensating controls with awareness of their trade-offs: place a normalizing reverse proxy or WAF in front of the Fastify service that URL-decodes and canonicalizes the path before it reaches the plugin, or reject requests whose path contains percent-encoded characters in the prefix segment (this can break legitimate clients that legitimately encode reserved characters); alternatively, stop relying on rewritePrefix as a security boundary and enforce authentication and authorization directly on the upstream's internal and administrative endpoints so that reaching them via a bypassed path still fails (most robust but requires upstream changes). Track fixes via https://github.com/fastify/fastify-http-proxy/security/advisories/GHSA-mx7v-qhg9-2mvv.

Share

EUVD-2026-45379 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy