Vulnerabilities in pkg:npm/9router
PACKAGECVE-2026-56679 is a HIGH mass assignment vulnerability (CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes) affecting 9router libraries in the npm ecosystem. The issue involves mass assignment in patch /api/settings allows authenticated authorization downgrade. Remediation is available by upgrading affected packages to version 0.5.4.
pkg:npm/9router
Vulnerability advisories affecting package pkg:npm/9router. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-vmjq-hvgq-2wv4 | CVE-2026-56679 | HIGH | 9router: Mass assignment in PATCH /api/settings allows authenticated authorization downgrade |
| GHSA-6mwv-4mrm-5p3m | CVE-2026-56678 | MODERATE | 9router: Kiro region injection allows authenticated SSRF with Authorization header forwarding |
| GHSA-cmhj-wh2f-9cgx | CVE-2026-56676 | HIGH | 9router: Image prefetch DNS rebinding allows SSRF to internal services |
| GHSA-x5c9-v98j-722r | CVE-2026-56675 | HIGH | 9router /v1 APIs has unauthenticated access via reverse proxy locality collapse |
| GHSA-32gc-64m7-hj7v | CVE-2026-56682 | MODERATE | 9Router has a Login Brute-Force Lockout Bypass via Spoofable X-9r-Real-Ip Header |
| GHSA-5mj8-gf6m-fhw8 | CVE-2026-56681 | HIGH | 9Router has an Authentication Bypass in Public LLM API via Spoofable X-9r-Real-Ip Header |
| GHSA-86m2-fcxq-5q7c | CVE-2026-55641 | HIGH | 9router: Unauthenticated `/v1` proxy access via `Host`-header spoofing → open AI relay + SSRF |
| GHSA-8gmq-j984-vp4r | CVE-2026-55638 | HIGH | 9router: Unauthenticated LLM proxy access via /codex rewrite authorization bypass |
| GHSA-8g4w-4ffg-8vgx | CVE-2026-56677 | HIGH | 9Router: Authenticated Server-Side Request Forgery (SSRF) via OIDC Provider Test Endpoint |
| GHSA-g6g7-pvmx-m74p | CVE-2026-59800 | CRITICAL | 9router: Missing Authorization and OS Command Injection |
| GHSA-7cfm-pqrj-xgq7 | CVE-2026-55501 | HIGH | 9router: Login brute-force protection bypass via spoofed X-Forwarded-For header |
| GHSA-qvfm-67h2-2qfx | CVE-2026-55500 | CRITICAL | 9routers has Exposure of Sensitive Information and Unprotected Database Import/Export, Allowing Complete Credential Theft and Database Takeover |
| GHSA-vjc7-jrh9-9j86 | - | CRITICAL | 9router has unauthenticated CRUD on /api/providers and Full API Key Leak via /api/usage/stats |
| GHSA-6g2f-w7g3-77vf | CVE-2026-49353 | HIGH | 9router has an Incomplete Fix: Local-Only Access Gate Bypass in 9router via Host Header SpoofING |
| GHSA-jphh-m39h-6gwx | CVE-2026-49352 | CRITICAL | 9router's Hardcoded Default fallback JWT Secret Allows Authentication Bypass |
| GHSA-fhh6-4qxv-rpqj | CVE-2026-46339 | CRITICAL | 9router: Unauthenticated Remote Code Execution via unprotected MCP custom plugin routes |
| GHSA-xrrh-p7f2-27vm | CVE-2026-5842 | MODERATE | decolua 9router vulnerable to authorization bypass |
CVE-2026-56679 at a Glance
How to Fix CVE-2026-56679
To remediate this vulnerability, upgrade all affected 9router dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install 9router@0.5.4
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls 9router
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-56679, inspect your project dependencies using npm:
npm ls 9router
Analyze the terminal output to locate any version of 9router in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.5.4), your application is affected.
Note: The npm ls 9router command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes, where the product receives input from an upstream component that specifies multiple attributes, properties, or fields that are to be initialized or updated in an object, but it does not properly control which attributes can be modified. In 9router, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-56679 Affected 9router Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
9router
|
npm |
< 0.5.4
|
0.5.4
|
References
Frequently Asked Questions
What is CVE-2026-56679?
Which 9router versions are affected?
What version fixes CVE-2026-56679?
Is 9router affected?
What CWE is associated with CVE-2026-56679?
How can I check npm dependencies for CVE-2026-56679?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-vmjq-hvgq-2wv4",
"modified" : "2026-09-23T18:12:33Z",
"published" : "2026-09-23T18:12:33Z",
"aliases" : [ "CVE-2026-56679" ],
"summary" : "9router: Mass assignment in PATCH /api/settings allows authenticated authorization downgrade",
"details" : "### Summary\nThe `PATCH /api/settings` endpoint writes the entire request body to persistent settings without a field whitelist. An authenticated user can set security-critical fields that are not meant to be modifiable here — notably `requireLogin`. Setting `requireLogin: false` disables authentication for the whole application, exposing all protected routes (e.g. `/api/keys`, `/api/providers`) to unauthenticated access.\n\n### Details\nRoot cause is unfiltered mass assignment (CWE-915):\n\n- `src/app/api/settings/route.js` (PATCH handler) parses the body and passes it to `updateSettings(body)`, with special handling only for `newPassword` and `oidcClientSecret`. All other fields pass through.\n- `src/lib/db/repos/settingsRepo.js` — `updateSettings` does `next = { ...current, ...updates }`, so any key in the body overwrites stored settings, including `requireLogin`, `tunnelDashboardAccess`, `authMode`.\n- `src/dashboardGuard.js` — `isAuthenticated` returns `true` whenever `settings.requireLogin === false`, bypassing auth on all protected routes.\n\nThis is distinct from CVE-2026-5842 (CWE-285, pre-auth bypass on `/api`, patched in 0.3.75). This finding requires a valid authenticated session and abuses input handling, not missing authentication.\n\n### PoC\nInstance on `localhost:20128`, default password `123456`.\n\n1. Authenticate, capture session:\n `POST /api/auth/login` body `{\"password\":\"123456\"}` → `200 {\"success\":true}`\n2. Mass-assign with the authenticated session:\n `PATCH /api/settings` body `{\"requireLogin\":false}` → `200`, response confirms `\"requireLogin\":false`\n3. Verify bypass with NO session/credentials:\n `GET /api/keys` → `200`, returns full API key list unauthenticated\n4. Cleanup (authenticated): `PATCH /api/settings` body `{\"requireLogin\":true}` → `GET /api/keys` returns `401` again\n\n### Impact\nPost-authentication mass assignment. Any authenticated user (including one using the default password) can disable authentication globally, then read all stored API keys and provider connection data without credentials, and toggle tunnel/dashboard exposure. Escalates to remote full compromise when chained with the default password `123456` on an instance exposed via tunnel (`tunnelDashboardAccess` defaults to `true`).\n\n### Suggested fix\nWhitelist user-configurable fields in the PATCH handler; move security-critical fields (`requireLogin`, `tunnelDashboardAccess`, `authMode`) to a dedicated endpoint requiring re-authentication (current-password re-entry), mirroring the existing DB export/import re-auth flow.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "9router"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "0.5.4"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.5.2"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/decolua/9router/security/advisories/GHSA-vmjq-hvgq-2wv4"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-56679"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/decolua/9router"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-915" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-09-23T18:12:33Z",
"nvd_published_at" : "2026-07-15T21:16:55Z"
}
}