CWE-798: Use of Hard-coded Credentials in decolua 9router (CVE-2026-49352)
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
AI Analysis
Technical Summary
9router uses a hardcoded fallback JWT secret string "9router-default-secret-change-me" for signing dashboard session JWTs if the JWT_SECRET environment variable is not configured. This secret is publicly known and unchanged across all affected versions (>=0.2.21 <0.4.45). Attackers can forge valid JWT tokens signed with this secret to bypass authentication and gain full dashboard and API access. The vulnerable code was introduced in commit 23cfb19 and persists through an OIDC refactor that relocated but did not change the secret. The recommended fix is to require JWT_SECRET at startup and fail if unset, or generate and persist a unique secret on first boot, avoiding fallback to a public constant.
Potential Impact
An attacker can bypass authentication entirely by forging JWT tokens signed with the known fallback secret. This grants full access to the 9router dashboard and API, allowing the attacker to read sensitive API keys and authentication tokens, change passwords, shut down the router, and modify all settings. The attacker can also pivot through other exposed interfaces such as the MCP stdio→SSE bridge. The impact is complete compromise of the affected 9router instance.
Mitigation Recommendations
No official patch is currently documented. The recommended mitigation is to configure the JWT_SECRET environment variable with a strong, unique secret before starting 9router. The server should be modified to fail startup if JWT_SECRET is not set, preventing fallback to the insecure default. Alternatively, implement logic to generate and persist a random secret on first boot and never use the hardcoded fallback. Until this is done, any 9router instance without JWT_SECRET set remains vulnerable.
CWE-798: Use of Hard-coded Credentials in decolua 9router (CVE-2026-49352)
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
CVSS v3.1
Score 9.8critical
Affected software
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Weaknesses
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
9router uses a hardcoded fallback JWT secret string "9router-default-secret-change-me" for signing dashboard session JWTs if the JWT_SECRET environment variable is not configured. This secret is publicly known and unchanged across all affected versions (>=0.2.21 <0.4.45). Attackers can forge valid JWT tokens signed with this secret to bypass authentication and gain full dashboard and API access. The vulnerable code was introduced in commit 23cfb19 and persists through an OIDC refactor that relocated but did not change the secret. The recommended fix is to require JWT_SECRET at startup and fail if unset, or generate and persist a unique secret on first boot, avoiding fallback to a public constant.
Potential Impact
An attacker can bypass authentication entirely by forging JWT tokens signed with the known fallback secret. This grants full access to the 9router dashboard and API, allowing the attacker to read sensitive API keys and authentication tokens, change passwords, shut down the router, and modify all settings. The attacker can also pivot through other exposed interfaces such as the MCP stdio→SSE bridge. The impact is complete compromise of the affected 9router instance.
Mitigation Recommendations
No official patch is currently documented. The recommended mitigation is to configure the JWT_SECRET environment variable with a strong, unique secret before starting 9router. The server should be modified to fail startup if JWT_SECRET is not set, preventing fallback to the insecure default. Alternatively, implement logic to generate and persist a random secret on first boot and never use the hardcoded fallback. Until this is done, any 9router instance without JWT_SECRET set remains vulnerable.
Technical Details
- Gcve Source
- db.gcve.eu
- Osv Id
- GHSA-jphh-m39h-6gwx
- Osv Schema Version
- 1.4.0
- Aliases
- ["CVE-2026-49352"]
- Ecosystems
- ["npm"]
- Database Specific Severity
- CRITICAL
- Cvss Version
- 3.1
Threat ID: 6a46ecae27e9c7971943b8b5
Added to database: 07/02/2026, 22:56:46 UTC
Last enriched: 07/16/2026, 07:55:41 UTC
Last updated: 07/19/2026, 06:01:37 UTC
Views: 34
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.