CVE-2026-49352

9Router: Hardcoded Default fallback JWT Secret Allows Authentication Bypass

Published Jul 15, 2026 CVSS 3.1 · 9.8 Critical EPSS < 1% KEV · Not listed
Description
9Router is an AI router & token saver. From 0.2.21 until 0.4.44, 9Router used the hardcoded fallback JWT secret 9router-default-secret-change-me in src/app/api/auth/login/route.js, src/middleware.js, and later src/lib/auth/dashboardSession.js, allowing attackers to forge an auth_token cookie when JWT_SECRET was unset. This issue is fixed in version 0.4.44

Analysis

AI-generated

Technical impact

9Router is an AI router & token saver. From version 0.2.21 through version 0.4.43 inclusive, the application used a hardcoded fallback JWT secret, 9router-default-secret-change-me, embedded in various source files such as src/app/api/auth/login/route.js, src/middleware.js, and later src/lib/auth/dashboardSession.js. When the environment variable JWT_SECRET is unset, the system falls back to this secret, allowing attackers to forge an auth_token cookie. A forged token signed with the known secret permits an attacker to impersonate any user, bypassing authentication and gaining unauthorized access to privileged functionality and data. The flaw, a classic instance of CWE‑798, was remedied in release 0.4.44, which removed the hardcoded fallback secret.

Affected Systems

The issue affects decolua's 9Router releases from version 0.2.21 through 0.4.43 inclusive. Version 0.4.44 introduces a fix that removes the hardcoded fallback secret. All deployments of the affected versions on any operating environment are vulnerable when the JWT_SECRET is not explicitly set.

Risk and Exploitability

With a CVSS score of 9.8 the vulnerability is considered critical. The EPSS indicates that exploit Likelihood is currently very low (<1%), and the vulnerability is not listed in the CISA KEV catalog. Based on the description, the likely attack vector is network‑based: an attacker who can set or modify the HTTP cookie for the 9Router domain can inject the forged token and bypass authentication. The vulnerability does not require privileged code execution or kernel‑level access; it only requires the ability to serve crafted requests to an exposed 9Router instance.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update 9Router to version 0.4.44 or later, which removes the hardcoded fallback secret.
  • Ensure that the environment variable JWT_SECRET is defined and set to a strong, random value in all deployments. This prevents the fallback from being used.
  • If an immediate upgrade is not possible, mandate setting JWT_SECRET before starting the application; this will stop the hardcoded secret from being utilized and mitigate the authentication bypass until a patch can be applied.

Generated by OpenCVE AI on July 31, 2026 at 02:45 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-jphh-m39h-6gwx 9router's Hardcoded Default fallback JWT Secret Allows Authentication Bypass
History
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}

Type Values Removed Values Added
First Time appeared Decolua
Decolua 9router
Vendors & Products Decolua
Decolua 9router
Type Values Removed Values Added
Description 9Router is an AI router & token saver. From 0.2.21 until 0.4.44, 9Router used the hardcoded fallback JWT secret 9router-default-secret-change-me in src/app/api/auth/login/route.js, src/middleware.js, and later src/lib/auth/dashboardSession.js, allowing attackers to forge an auth_token cookie when JWT_SECRET was unset. This issue is fixed in version 0.4.44
Title 9Router: Hardcoded Default fallback JWT Secret Allows Authentication Bypass
Weaknesses CWE-798
References
Metrics cvssV3_1

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

Weaknesses
  • CWE-798

    Use of Hard-coded Credentials

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
Jul 16, 2026, 6:55 PM
Reserved
May 29, 2026, 2:35 PM
Status
Deferred
Published
Jul 15, 2026, 9:16 PM
Modified
Oct 24, 2026, 9:10 PM