Every CVE Search/ Get API key

CVE-2026-84428

fastify vulnerable to header validation bypass via incomplete schema case normalization

7.5 HighFix available

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

0.52%Up 0.2 points since Sep 5, 2026
90%50%10%1%

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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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 HighCVSS: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

Affected packages
PackageAffectedFixed
fastify
npm
before 5.12.2
5.12.2
fastify
TuxCare: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
fastify
TuxCare: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
fastify
TuxCare: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
fastify
TuxCare: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
fastify
TuxCare: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
fastify
TuxCare: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
fastify
TuxCare: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
fastify
TuxCare: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

History
RecordedChangedSources
affected, aliasesOSV
affected, facts
first indexedCVE 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

MoveEnter Open