Description
@fastify/jwt is a JWT utility plugin for Fastify. In versions prior to 10.2.5, the top-level sign and verify methods replace the globally configured defaults with the per-call options instead of merging them, so passing any per-call option silently drops every global default that the call does not restate, including temporal protections such as token expiration and maximum accepted token age. A token signed this way carries no expiration claim and never expires, and verification stops enforcing a configured maximum age, so stale or never-expiring tokens are accepted. The route-level decorators for signing and verifying already merge options and are not affected. The issue is fixed in @fastify/jwt 10.2.5, and users should upgrade to 10.2.5 or later.
Published: 2026-10-18
Score: 6.8 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Unrestricted token validity
Action: Upgrade
AI Analysis

Impact

The vulnerability in @fastify/jwt causes the top‑level sign and verify methods to replace any global defaults with the options passed in the individual call, silently discarding options that are not repeated. As a result, a token created with per‑call options may lack an expiration claim, never expires, and the verification process stops enforcing the maximum token age. Tokens issued in this manner remain valid indefinitely, allowing attackers to keep using stale or never‑expiring tokens, which can lead to unauthorized access to protected resources and a broader impact on confidentiality and integrity. This weakness is classified as CWE‑613, an insufficient protection of authentication credentials.

Affected Systems

Any Node.js application using the @fastify/jwt plugin version prior to 10.2.5. The issue is confined to the plugin itself; route‑level decorators that merge options are not affected. Users of older versions should be aware that tokens signed or verified via the top‑level methods may be missing expiration or maximum‑age checks.

Risk and Exploitability

The CVSS score of 6.8 indicates moderate severity. The lack of an EPSS score means the current exploitation probability is unknown, though the vulnerability introduces a significant risk due to the potential for perpetual token validity. The vulnerability is not listed in CISA KEV. Attackers generally need to supply code that calls the sign or verify functions without providing explicit expiration options, or rely on the fact that existing signing code in an application might already produce tokens without expiry. The prior default settings are dropped, so body‑injection attacks or accidental misuse can easily trigger the issue. The best mitigation is to update to version 10.2.5 or later, which restores the merging behavior and ensures tokens contain the expected temporal claims.

Generated by OpenCVE AI on October 18, 2026 at 16:29 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade @fastify/jwt to 10.2.5 or later
  • Audit the application code to ensure that every call to the top‑level sign and verify functions includes explicit expiration or maximum‑age options
  • Add application‑level checks that reject JWTs missing an exp claim or exceeding the configured maximum age
  • Monitor authentication logs for unusually long‑lived or anonymous sessions

Generated by OpenCVE AI on October 18, 2026 at 16:29 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 21 Oct 2026 17:15:00 +0000

Type Values Removed Values Added
First Time appeared Fastify
Fastify fastify/jwt
Vendors & Products Fastify
Fastify fastify/jwt

Tue, 20 Oct 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Sun, 18 Oct 2026 14:45:00 +0000

Type Values Removed Values Added
Description @fastify/jwt is a JWT utility plugin for Fastify. In versions prior to 10.2.5, the top-level sign and verify methods replace the globally configured defaults with the per-call options instead of merging them, so passing any per-call option silently drops every global default that the call does not restate, including temporal protections such as token expiration and maximum accepted token age. A token signed this way carries no expiration claim and never expires, and verification stops enforcing a configured maximum age, so stale or never-expiring tokens are accepted. The route-level decorators for signing and verifying already merge options and are not affected. The issue is fixed in @fastify/jwt 10.2.5, and users should upgrade to 10.2.5 or later.
Title @fastify/jwt vulnerable to missing token expiration when per-call options drop global defaults
Weaknesses CWE-613
References
Metrics cvssV3_1

{'score': 6.8, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N'}


Subscriptions

Fastify Fastify/jwt
cve-icon MITRE

Status: PUBLISHED

Assigner: openjs

Published:

Updated: 2026-10-20T18:40:02.655Z

Reserved: 2026-10-13T15:07:55.688Z

Link: CVE-2026-110024

cve-icon Vulnrichment

Updated: 2026-10-20T18:39:34.569Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-18T15:16:51.417

Modified: 2026-10-20T19:17:29.257

Link: CVE-2026-110024

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-21T17:01:49Z

Weaknesses
  • CWE-613

    Insufficient Session Expiration