Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Fabio-fronted backend unauthenticated
-
DeliverySend request naming trust header in Connection header
-
ExploitGo ReverseProxy strips configured header pre-backend
-
ExecutionBackend loses client-IP/TLS/request-ID signal
-
ImpactAuthorization misjudged or audit trail broken
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Anti-spoofing controls
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitable only when the operator has configured one or more of the proxy.header options - ClientIPHeader, TLSHeader, or RequestID - which are EMPTY BY DEFAULT, meaning default Fabio installations are NOT affected. When set, an unauthenticated remote client simply lists the configured header name in the inbound HTTP |
| Impact | This is a genuine but low-priority integrity issue. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N = 5.8 Medium) correctly reflects a network, unauthenticated, low-complexity attack with only limited integrity impact and a scope change (the harm lands on the backend, a separate trust authority, not on Fabio itself). There is NO confidentiality or availability impact - this is not RCE or data theft; it is the silent removal of trust-signal headers. Critically, the description states the affected proxy.header options (ClientIPHeader, TLSHeader, RequestID) are EMPTY BY DEFAULT, so default deployments are unaffected - the PR:N rating reflects protocol-level access but the real precondition is a non-default operator configuration, which the raw score does not capture. No EPSS score, KEV listing, or public POC was provided; per precision rules this is 'no public exploit identified at time of analysis.' No SSVC decision data was supplied. This is an incomplete-fix follow-up to CVE-2025-48865, which raises some regression concern, but real-world urgency is bounded by the non-default config requirement and the fact that impact is loss of audit/authz signals rather than a direct bypass in every deployment. |
| Exploit ScenarioDerived | An operator runs Fabio (1.6.6-1.7.1) configured to inject a client-IP, TLS-termination, or request-ID header that backends trust for authorization or audit logging. An unauthenticated remote client sends a request with |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Fabio 1.6.6 through 1.7.1 (fixed in 1.7.2) fails to protect operator-renamed trust headers, so an unauthenticated remote client can force Go's reverse proxy to strip the configured ClientIPHeader, TLSHeader, or RequestID from its own request by naming them in the inbound Connection header, causing backends that rely on those signal headers for authorization or audit logging to lose them. The exposure is narrow: the three affected options are empty by default, the hardcoded forwarded-header allowlist (X-Forwarded-*, Forwarded, X-Real-Ip, X-Request-Id, X-Client-Ip) remains protected, and impact only materializes in deployments that both enable these options and have backends that trust the injected values. No public exploit code was identified at time of analysis and the issue is not in CISA KEV, though the integrity weakness is remotely reachable with no authentication (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N, 5.8).
RemediationAI
Vendor-released patch: Fabio 1.7.2 (https://github.com/fabiolb/fabio/releases/tag/v1.7.2), which corresponds to upstream commit 240526a8004077edad4fb96d25b382bfc3901357 and is documented in advisory GHSA-fq95-v8xc-jm3v; upgrading is the definitive fix because it makes the protected-header set configuration-aware by canonicalizing and registering the configured ClientIPHeader, TLSHeader, and RequestID names. Where an immediate upgrade is not possible, the most effective compensating control is to stop relying on operator-renamed trust headers: leave ClientIPHeader, TLSHeader, and RequestID unset (the default) or configure them to names already inside the hardcoded allowlist (X-Forwarded-*, Forwarded, X-Real-Ip, X-Request-Id, X-Client-Ip), which restores protection at the cost of forcing any backend that references custom header names to be reconfigured. A further stopgap is to reject or sanitize inbound requests whose Connection header names any of the configured trust headers at an edge proxy, load balancer, or WAF in front of Fabio, but this adds a layer to maintain and can break legitimate clients that send multi-hop Connection directives. Deployments that must keep custom header names and cannot upgrade should ensure backends treat these headers as advisory only and perform authorization on independently authenticated signals, since the stripped headers can no longer be trusted for access decisions or audit trails.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Fabio is a Consul-aware HTTP(S) and TCP router that fronts backend services and injects trust metadata into proxied requests. Per RFC 7230 hop-by-hop semantics, Go's net/http ReverseProxy removes any header named in the incoming Connection header before forwarding the request upstream; Fabio's proxy/http_headers.go addHeaders function therefore maintains a protectHeaders allowlist so that attacker-named headers cannot be deleted out from under the trust chain. The fix for CVE-2025-48865 hardened this list for a hardcoded set of forwarded headers, but the operator-configured Proxy.ClientIPHeader, Proxy.TLSHeader, and Proxy.RequestID names - registered in proxy/http_proxy.go HTTPProxy.ServeHTTP via addHeaders - were never added to it, a CWE-290 authentication-bypass-by-spoofing weakness in which the trust boundary is crossed by header manipulation rather than credential compromise. The upstream commit (240526a8004077edad4fb96d25b382bfc3901357) converts the map into an exported DefaultProtectHeaders and, in main.go, canonicalizes and inserts the configured RequestID, ClientIPHeader, and TLSHeader names via textproto.CanonicalMIMEHeaderKey before wiring ProtectHeaders into the proxy, closing the gap by making the protected set configuration-aware. The CPE string cpe:2.3:a:fabiolb:fabio:*:*:*:*:*:*:*:* reflects that all Fabio releases in the vulnerable range are affected regardless of platform.
Know when Fabio gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N
Unauthenticated network request (PR:N/AV:N/AC:L); scope change (S:C) since integrity harm lands on the backend authority, limited to lost trust signals (I:L), no C/A impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Fabio is an HTTP(S) and TCP router for deploying applications managed by consul. From 1.6.6 until 1.7.2, the CVE-2025-48865 fix in proxy/http_headers.go uses protectHeaders for a hardcoded set of forwarded headers but omits the operator-configured ClientIPHeader, TLSHeader, and RequestID names. In proxy/http_proxy.go, HTTPProxy.ServeHTTP calls addHeaders to set these trust headers before Go ReverseProxy processes the inbound Connection header, allowing an unauthenticated client to name and remove the configured headers before the request reaches the backend. Deployments that enable the corresponding proxy.header options can therefore lose client-IP, TLS-termination, or request-correlation signals used by backend authorization and auditing; the options are empty by default, and the hardcoded protected forwarded headers are unaffected. This issue is fixed in version 1.7.2.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-83986
GHSA-fq95-v8xc-jm3v
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB