Fabio is an HTTP(S) and TCP router for deploying applications managed by consul. Prior to version 1.6.6, Fabio allows clients to remove X-Forwarded headers (except X-Forwarded-For) due to a vulnerability in how it processes hop-by-hop headers. Fabio adds HTTP headers like X-Forwarded-Host and X-Forwarded-Port when routing requests to backend applications. Since the receiving application should trust these headers, allowing HTTP clients to remove or modify them creates potential security vulnerabilities. Some of these custom headers can be removed and, in certain cases, manipulated. The attack relies on the behavior that headers can be defined as hop-by-hop via the HTTP Connection header. This issue has been patched in version 1.6.6.
Fabio automatically adds HTTP headers such as X-Forwarded-Host and X-Forwarded-Port when routing requests to backend applications. The vulnerability results from incorrect processing of hop-by-hop headers: an attacker can declare selected headers as hop-by-hop using the HTTP Connection header, causing them to be removed or modified before the request is passed to the backend. Since backend applications trust these headers, their removal or substitution can lead to bypass of security mechanisms based on these values.
An attacker can remove or manipulate trusted X-Forwarded headers passed to backend applications, which may lead to data integrity violations and potential bypass of access control mechanisms or backend security logic.
Fabio should be updated to version 1.6.6, where the issue has been fixed. The patch is available in the vendor's repository (commit fdaf1e966162e9dd3b347ffdd0647b39dc71a1a3) and as an official release v1.6.6.
Fabiolb Fabio versions before 1.6.6
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NFabiolb Fabio
APPFabiolb< 1.6.6