Description
9Router is an AI router & token saver. Prior to 0.5.6, 9Router deployments that allow requests to reach Next.js without the sanitizing custom-server.js wrapper use the client-supplied X-9r-Real-Ip value as the bucket key in getClientIp, checkLock, and recordFail in src/lib/auth/loginLimiter.js for POST /api/auth/login. A remote unauthenticated attacker can rotate the header on every password guess so each request uses a new failed-attempt bucket and the five-attempt progressive lockout never returns HTTP 429. This permits unthrottled password guessing against the dashboard login and can lead to an administrative session if the password is recovered. This issue is fixed in version 0.5.6.
Published: 2026-09-22
Score: 5.3 Medium
EPSS: n/a
KEV: No
Impact: Administrative Access Gain
Action: Apply Patch
AI Analysis

Impact

The vulnerability exists in 9Router's login flow where the application uses the client‑supplied X‑9r‑Real‑Ip header as the key for tracking login attempts. Because the header can be spoofed, an attacker can rotate it with each guess, causing the login limiter to treat each attempt as a new bucket. This bypass prevents the five‑attempt progressive lockout and allows the attacker to perform password guessing against the dashboard without any throttling or rate limits. Successful guessing can lead to an administrative session on the router.

Affected Systems

Affected deployments include any versions of decolua 9Router released before version 0.5.6. The vulnerability is present only when requests are able to reach Next.js without the custom‑server.js wrapper that sanitizes the X‑9r‑Real‑Ip header. There are no known mitigations for earlier versions apart from applying the patch.

Risk and Exploitability

The CVSS score for this issue is 5.3, indicating a moderate severity. The lack of an EPSS score and the fact that it is not listed in the CISA KEV catalog suggest that large‑scale exploitation has not yet been observed, yet the attack vector is simple: a remote unauthenticated attacker can send HTTP requests to /api/auth/login from any IP. Because the bypass relies on the application accepting an arbitrary header, an attacker can run the brute‑force attack entirely from outside the network, making it a realistic threat for exposed deployments.

Generated by OpenCVE AI on September 22, 2026 at 17:38 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade to version 0.5.6 or later, which removes the vulnerability by no longer using the client‑supplied IP header for login limiting.
  • If an upgrade is not immediately possible, configure the deployment to enforce strict origin of requests by removing or sanitizing the X‑9r‑Real‑Ip header before it reaches the login limiter, or revert to using the standard request IP.
  • Apply additional login rate limiting or authentication challenges (such as CAPTCHAs) on the /api/auth/login endpoint to reduce the impact of any remaining brute‑force attempts.

Generated by OpenCVE AI on September 22, 2026 at 17:38 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-32gc-64m7-hj7v 9Router has a Login Brute-Force Lockout Bypass via Spoofable X-9r-Real-Ip Header
History

Tue, 22 Sep 2026 17:45:00 +0000

Type Values Removed Values Added
First Time appeared Decolua
Decolua 9router
Vendors & Products Decolua
Decolua 9router

Tue, 22 Sep 2026 16:30:00 +0000

Type Values Removed Values Added
Description 9Router is an AI router & token saver. Prior to 0.5.6, 9Router deployments that allow requests to reach Next.js without the sanitizing custom-server.js wrapper use the client-supplied X-9r-Real-Ip value as the bucket key in getClientIp, checkLock, and recordFail in src/lib/auth/loginLimiter.js for POST /api/auth/login. A remote unauthenticated attacker can rotate the header on every password guess so each request uses a new failed-attempt bucket and the five-attempt progressive lockout never returns HTTP 429. This permits unthrottled password guessing against the dashboard login and can lead to an administrative session if the password is recovered. This issue is fixed in version 0.5.6.
Title 9Router: Login Brute-Force Lockout Bypass via Spoofable X-9r-Real-Ip Header
Weaknesses CWE-307
CWE-807
References
Metrics cvssV3_1

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


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-22T17:23:12.515Z

Reserved: 2026-06-22T16:39:01.044Z

Link: CVE-2026-56682

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Deferred

Published: 2026-09-22T17:17:24.290

Modified: 2026-09-22T17:17:24.420

Link: CVE-2026-56682

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-22T17:30:18Z

Weaknesses
  • CWE-307

    Improper Restriction of Excessive Authentication Attempts

  • CWE-807

    Reliance on Untrusted Inputs in a Security Decision