CVE-2026-84428
fastify vulnerable to header validation bypass via incomplete schema case normalization
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.5
fastify vulnerable to header validation bypass via incomplete schema case normalization
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.
- Record
CVE-2026-84428- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-178
- Updated
- 2026-11-02
EUVDEUVD-2026-70998
7.5
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.
- Record
EUVD-2026-70998- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-9q9j-q6p8-xq58
7.5
fastify vulnerable to header validation bypass via incomplete schema case normalization
Impact
Fastify lowercases header-schema property names before compiling the schema, because Node.js stores request header names in lowercase. That normalization was incomplete: it lowercased only top-level properties keys and the root required array, and did not lowercase the JSON Schema Draft 7 dependencies keyword (its trigger keys and dependent property names) or names in nested subschemas. As a result, a header schema that uses dependencies to require one header when another is present (for example X-Admin requiring X-Admin-Token) never matches the lowercased request headers, so the dependency assertion is silently skipped. An unauthenticated remote client can send the header that activates a privileged path while omitting the header the dependency was meant to require, bypassing a schema-enforced security control. The header schema is idiomatic, valid JSON Schema Draft 7, and no custom validator, malformed request, or misconfiguration is required.
Patches
Header-schema names are now normalized across all schema positions (properties, required, dependencies, dependentRequired, dependentSchemas, and nested subschemas). Patched in fastify 5.12.2. The fix is also included in the 6.0.0 release. Header schemas referenced through an external shared $ref (registered with addSchema) are not reached by this normalization and now emit an FSTSEC002 startup warning; inline the header schema to keep case-insensitive assertions in effect.
Workarounds
If upgrading is not immediately possible, write header-schema names in lowercase so the dependencies and other case-sensitive assertions match Node's lowercased request headers, or enforce the cross-header requirement in an onRequest or preValidation hook instead of the schema.
- Record
GHSA-9q9j-q6p8-xq58- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-178
- Updated
- 2026-11-02
NVD
7.5
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.
- Record
CVE-2026-84428- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-178
- Updated
- 2026-11-02
OSV
7.5
fastify vulnerable to header validation bypass via incomplete schema case normalization
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.
- Record
CVE-2026-84428- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-178
- Updated
- 2026-11-02
OSVGHSA-9q9j-q6p8-xq58
7.5
fastify vulnerable to header validation bypass via incomplete schema case normalization
Impact
Fastify lowercases header-schema property names before compiling the schema, because Node.js stores request header names in lowercase. That normalization was incomplete: it lowercased only top-level properties keys and the root required array, and did not lowercase the JSON Schema Draft 7 dependencies keyword (its trigger keys and dependent property names) or names in nested subschemas. As a result, a header schema that uses dependencies to require one header when another is present (for example X-Admin requiring X-Admin-Token) never matches the lowercased request headers, so the dependency assertion is silently skipped. An unauthenticated remote client can send the header that activates a privileged path while omitting the header the dependency was meant to require, bypassing a schema-enforced security control. The header schema is idiomatic, valid JSON Schema Draft 7, and no custom validator, malformed request, or misconfiguration is required.
Patches
Header-schema names are now normalized across all schema positions (properties, required, dependencies, dependentRequired, dependentSchemas, and nested subschemas). Patched in fastify 5.12.2. The fix is also included in the 6.0.0 release. Header schemas referenced through an external shared $ref (registered with addSchema) are not reached by this normalization and now emit an FSTSEC002 startup warning; inline the header schema to keep case-insensitive assertions in effect.
Workarounds
If upgrading is not immediately possible, write header-schema names in lowercase so the dependencies and other case-sensitive assertions match Node's lowercased request headers, or enforce the cross-header requirement in an onRequest or preValidation hook instead of the schema.
- Record
GHSA-9q9j-q6p8-xq58- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-178
- Updated
- 2026-11-02
Show 8 moreShow less
OSVCLSA-2026-1791629281 No score
TuxCare security update for fastify (2 CVEs)
TuxCare rebuilt fastify to address 2 CVEs. Fixed in 3.29.5-tuxcare.7.
- Record
CLSA-2026-1791629281- Updated
- 2026-11-02
OSVCLSA-2026-1791634874 No score
TuxCare security update for fastify (1 CVE)
TuxCare rebuilt fastify to address 1 CVE. Fixed in 5.12.0-tuxcare.4.
- Record
CLSA-2026-1791634874- Updated
- 2026-11-02
OSVCLSA-2026-1791806519 No score
TuxCare security update for fastify (3 CVEs)
TuxCare rebuilt fastify to address 3 CVEs. Fixed in 5.7.4-tuxcare.5.
- Record
CLSA-2026-1791806519- Updated
- 2026-11-02
OSVCLSA-2026-1791806950 No score
TuxCare security update for fastify (2 CVEs)
TuxCare rebuilt fastify to address 2 CVEs. Fixed in 5.2.1-tuxcare.5.
- Record
CLSA-2026-1791806950- Updated
- 2026-11-02
OSVCLSA-2026-1791839080 No score
TuxCare security update for fastify (3 CVEs)
TuxCare rebuilt fastify to address 3 CVEs. Fixed in 5.11.3-tuxcare.6.
- Record
CLSA-2026-1791839080- Updated
- 2026-11-02
OSVCLSA-2026-1792233089 No score
TuxCare security update for fastify (2 CVEs)
TuxCare rebuilt fastify to address 2 CVEs. Fixed in 4.29.1-tuxcare.7.
- Record
CLSA-2026-1792233089- Updated
- 2026-11-02
OSVCLSA-2026-1792242589 No score
TuxCare security update for fastify (1 CVE)
TuxCare rebuilt fastify to address 1 CVE. Fixed in 5.12.1-tuxcare.5.
- Record
CLSA-2026-1792242589- Updated
- 2026-11-02
OSVCLSA-2026-1794060794 No score
TuxCare security update for fastify (6 CVEs)
TuxCare rebuilt fastify to address 6 CVEs. Fixed in 4.28.1-tuxcare.1.
- Record
CLSA-2026-1794060794- Updated
- 2026-11-07
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
fastifynpm |
before 5.12.2 | 5.12.2 |
fastifyTuxCare:npm From an advisory covering 2 CVEs |
3.29.5-tuxcare.0 up to 3.29.5-tuxcare.7, plus listed versions 3.29.53.29.5-tuxcare.13.29.5-tuxcare.23.29.5-tuxcare.33.29.5-tuxcare.43.29.5-tuxcare.53.29.5-tuxcare.6 |
3.29.5-tuxcare.7 |
fastifyTuxCare:npm |
5.12.0-tuxcare.0 up to 5.12.0-tuxcare.4, plus listed versions 5.12.05.12.0-tuxcare.15.12.0-tuxcare.25.12.0-tuxcare.3 |
5.12.0-tuxcare.4 |
fastifyTuxCare:npm From an advisory covering 3 CVEs |
5.7.4-tuxcare.0 up to 5.7.4-tuxcare.5, plus listed versions 5.7.45.7.4-tuxcare.15.7.4-tuxcare.25.7.4-tuxcare.35.7.4-tuxcare.4 |
5.7.4-tuxcare.5 |
fastifyTuxCare:npm From an advisory covering 2 CVEs |
5.2.1-tuxcare.0 up to 5.2.1-tuxcare.5, plus listed versions 5.2.15.2.1-tuxcare.15.2.1-tuxcare.25.2.1-tuxcare.35.2.1-tuxcare.4 |
5.2.1-tuxcare.5 |
fastifyTuxCare:npm From an advisory covering 3 CVEs |
5.11.3-tuxcare.0 up to 5.11.3-tuxcare.6, plus listed versions 5.11.35.11.3-tuxcare.15.11.3-tuxcare.25.11.3-tuxcare.35.11.3-tuxcare.45.11.3-tuxcare.5 |
5.11.3-tuxcare.6 |
fastifyTuxCare:npm From an advisory covering 2 CVEs |
4.29.1-tuxcare.0 up to 4.29.1-tuxcare.7, plus listed versions 4.29.14.29.1-tuxcare.14.29.1-tuxcare.24.29.1-tuxcare.34.29.1-tuxcare.44.29.1-tuxcare.54.29.1-tuxcare.6 |
4.29.1-tuxcare.7 |
fastifyTuxCare:npm |
5.12.1-tuxcare.0 up to 5.12.1-tuxcare.5, plus listed versions 5.12.15.12.1-tuxcare.15.12.1-tuxcare.25.12.1-tuxcare.35.12.1-tuxcare.4 |
5.12.1-tuxcare.5 |
fastifyTuxCare:npm From an advisory covering 6 CVEs |
4.28.1-tuxcare.0 up to 4.28.1-tuxcare.1, plus listed versions 4.28.1 |
4.28.1-tuxcare.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases | OSV | |
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-84428 is a high vulnerability (CVSS 7.5) in @clerk Fastify, published September 4, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.52%, the 44th percentile. Fixed in fastify 5.12.2.
References
github.com/fastify/fastify/security/advisories/GHSA-9q9j-q6p8-xq58
cna.openjsf.org/security-advisories.html
nvd.nist.gov/vuln/detail/CVE-2026-84428
github.com/fastify/fastify/commit/179619c8e99d54924309b9933402151ef9af37e0
github.com/fastify/fastify/releases/tag/v5.12.2
github.com/advisories/GHSA-9q9j-q6p8-xq58
github.com/CVEProject/cvelistV5/tree/main/cves/2026/84xxx/CVE-2026-84428.json
github.com/fastify/fastify