⚠️ IMPORTANT CLARIFICATIONS
Affected Configurations
This vulnerability ONLY affects applications that:
- Use RegExp objects (not strings) in the allowedAud, allowedIss, allowedSub, allowedJti, or allowedNonce options
- Configure patterns susceptible to catastrophic backtracking
- Example:
allowedAud: /^(a+)+X$/ ← VULNERABLE
- Example:
allowedAud: "api.company.com" ← SAFE
Not Affected
- Applications using string patterns for audience validation (most common)
- Applications using safe RegExp patterns without nested quantifiers
- Default fast-jwt configurations
Assessment Guide
To determine if you're affected:
- Check ifallowedAud, allowedIss, allowedSub, allowedJti, or allowedNonce use RegExp objects (
/pattern/ or new RegExp())
- If yes, review the pattern for nested quantifiers like
(a+)+, (.*)*, etc.
- If no RegExp usage, you are NOT affected
Summary
A denial-of-service condition exists in fast-jwt when the allowedAud verification option is configured using a regular expression.
Because the aud claim is attacker-controlled and the library evaluates it against the supplied RegExp, a crafted JWT can trigger catastrophic backtracking in the JavaScript regex engine, resulting in significant CPU consumption during verification.
This occurs with a validly signed JWT, making the issue exploitable in authenticated contexts such as:
-
API gateways
-
authentication middleware
-
service-to-service communication
-
OAuth / OIDC token validation pipelines
Affected Component
Impact
CPU exhaustion / Denial of Service
A crafted JWT causes verification to take multiple seconds per request due to catastrophic regex backtracking.
Measured verification times
Input size (n) | Verification time
-- | --
24 | ~123 ms
28 | ~1.97 s
30 | ~7.85 s
This is sufficient to:
-
block Node.js event loop threads
-
degrade API throughput
-
cause cascading service failures
-
increase serverless execution costs
-
saturate authentication infrastructure
Root Cause
The library allows regular expressions in claim validation:
The aud claim is attacker-controlled:
aud = "a".repeat(n) + "Y"
This creates catastrophic backtracking in the JavaScript regex engine.
Verification time grows exponentially as input length increases.
Exploitability
Attack requires:
-
a valid signed JWT (post-authentication context)
-
attacker control over the aud claim
-
a vulnerable regex configured by the application
Common real-world scenarios
Proof of Concept
Reproduction steps
-
Install fast-jwt
-
Configure verifier with a RegExp in allowedAud
-
Send a valid signed JWT with adversarial aud
Attached artifacts
Observed behavior
Verification CPU time increases from milliseconds to multiple seconds as input length grows.
Security Classification
-
CWE-1333: Inefficient Regular Expression
-
CWE-400: Uncontrolled Resource Consumption
-
Class: Authenticated Denial of Service
Expected Behavior
The library should prevent unbounded CPU work on attacker-controlled claims.
Possible mitigations
Notes
Signature verification occurs before claim validation, therefore this is not a pre-authentication DoS.
However, the vulnerability remains exploitable in authenticated or token-bearing contexts and can significantly impact production environments.
### References
- https://github.com/nearform/fast-jwt/security/advisories/
GHSA-cjw9-ghj4-fwxf
- https://github.com/
nearform/fast-jwt/pull/595
- https://github.com/nearform/fast-jwt/commit/b0be0ca161593836a153d5180ca5358ad9b5de94
- https://github.com/nearform/fast-jwt/releases/tag/v6.2.1
- https://nvd.nist.gov/vuln/detail/
CVE-2026-35041
Affected Configurations
This vulnerability ONLY affects applications that:
allowedAud: /^(a+)+X$/← VULNERABLEallowedAud: "api.company.com"← SAFENot Affected
Assessment Guide
To determine if you're affected:
/pattern/ornew RegExp())(a+)+,(.*)*, etc.Summary
A denial-of-service condition exists in
fast-jwtwhen theallowedAudverification option is configured using a regular expression.Because the
audclaim is attacker-controlled and the library evaluates it against the suppliedRegExp, a crafted JWT can trigger catastrophic backtracking in the JavaScript regex engine, resulting in significant CPU consumption during verification.This occurs with a validly signed JWT, making the issue exploitable in authenticated contexts such as:
API gateways
authentication middleware
service-to-service communication
OAuth / OIDC token validation pipelines
Affected Component
Library: fast-jwt
Version tested: 6.1.0
Runtime: Node.js v24.13.1
Feature: claim validation using
allowedAud: RegExpImpact
CPU exhaustion / Denial of Service
A crafted JWT causes verification to take multiple seconds per request due to catastrophic regex backtracking.
Measured verification times
This is sufficient to:
block Node.js event loop threads
degrade API throughput
cause cascading service failures
increase serverless execution costs
saturate authentication infrastructure
Root Cause
The library allows regular expressions in claim validation:
The
audclaim is attacker-controlled:This creates catastrophic backtracking in the JavaScript regex engine.
Verification time grows exponentially as input length increases.
Exploitability
Attack requires:
a valid signed JWT (post-authentication context)
attacker control over the
audclaima vulnerable regex configured by the application
Common real-world scenarios
shared HS secrets
internal JWT issuance
microservice authentication
OAuth / OIDC custom audiences
internal service tokens
Proof of Concept
Reproduction steps
Install
fast-jwtConfigure verifier with a RegExp in
allowedAudSend a valid signed JWT with adversarial
audAttached artifacts
poc-suite-redos-fastjwt.jsevidence-redos-fastjwt.jsonObserved behavior
Verification CPU time increases from milliseconds to multiple seconds as input length grows.
Security Classification
CWE-1333: Inefficient Regular Expression
CWE-400: Uncontrolled Resource Consumption
Class: Authenticated Denial of Service
Expected Behavior
The library should prevent unbounded CPU work on attacker-controlled claims.
Possible mitigations
safe-regex validation
maximum length enforcement for claims
regex complexity limits
documentation warning about ReDoS risks when using RegExp-based validation
Notes
Signature verification occurs before claim validation, therefore this is not a pre-authentication DoS.
However, the vulnerability remains exploitable in authenticated or token-bearing contexts and can significantly impact production environments.
### References - https://github.com/nearform/fast-jwt/security/advisories/GHSA-cjw9-ghj4-fwxf - https://github.com/nearform/fast-jwt/pull/595 - https://github.com/nearform/fast-jwt/commit/b0be0ca161593836a153d5180ca5358ad9b5de94 - https://github.com/nearform/fast-jwt/releases/tag/v6.2.1 - https://nvd.nist.gov/vuln/detail/CVE-2026-35041