CVE-2026-84428
moderateHeader schema case-handling flaw in Fastify allows dependency check bypass
Fastify versions before 5.12.2 mishandle case when compiling a route's header schema: while it lowercases property keys and the root-level required array, it does not lowercase the trigger and dependent header names inside the JSON Schema Draft 7 'dependencies' keyword (CWE-178, improper handling of case sensitivity). Because Node.js stores incoming request header names in lowercase, a dependency written in canonical case, such as requiring an authentication header whenever a privileged-mode header is present, never matches, so the presence assertion is silently skipped. An unauthenticated remote attacker can exploit this by sending the header that activates a privileged branch while omitting the header the dependency was meant to require, bypassing the conditional check (integrity impact only, per the CVSS score of 7.5). Any Fastify application that defines route-level header schemas using the 'dependencies' keyword with mixed-case header names is affected; applications not using that schema construct are not exposed. Exploitation is not currently observed: there is no known public proof-of-concept, the flaw is not in CISA KEV, and EPSS is about 0.3% (21st percentile).
What to do: Upgrade to fastify 5.12.2 or later. As an interim measure, audit route header schemas for 'dependencies' keywords whose trigger or dependent names are not lowercase and either write those names fully in lowercase (matching what Node stores) or enforce the required header in application code. Given no known public PoC, KEV listing, and low EPSS, there is no evidence of active exploitation, but patch promptly where the affected schema pattern gates authentication or privileged operations.
| fastify (Node.js web framework) | All versions before 5.12.2 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
fastify versions before 5.12.2 implement the case-insensitive nature of HTTP header names by lowercasing names in a route's header schema before compiling it, but the transformation is incomplete: it lowercases the properties keys and the root-level required array, and does not lowercase the trigger and dependent names inside the JSON Schema Draft 7 dependencies keyword. Because Node stores request header names in lowercase, a canonical-case dependency such as requiring an authentication header whenever a privileged-mode header is present never matches, and the presence assertion is silently skipped. An unauthenticated remote client can therefore send the header that activates a privileged branch while omitting the header the dependency was meant to require, bypassing the conditional check. Users should upgrade to fastify 5.12.2 or later.
- Vendors
- fastify
- Products
- fastify
- Weakness
- CWE-178
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
In the news0 stories
No ingested article mentions this CVE yet.