criticalCVSS 9.9Vulnerability

CVE-2026-55500

## Summary The `/api/settings/database` endpoint allows full database export (containing all credentials, API keys, OAuth tokens, and settings) and full database import (complete overwrite) without any authentication requirement beyond the `ALWAYS_PROTECTED` middleware check, which only validates JWT or CLI token. Combined with other vulnerabilities (e.g., default password, tunnel exposure), this enables complete database takeover. ## Description The endpoint `/api/settings/database` is listed in `ALWAYS_PROTECTED` in `dashboardGuard.js` (line 42), which requires a valid JWT token or CLI token. However, this protection is insufficient because: 1. **GET (Export):** Returns the complete database including API keys (`key` field in `apiKeys` table), OAuth tokens, and all provider credentials. Line 80 in `src/lib/db/index.js`: `apiKeys: db.all("SELECT * FROM apiKeys").map(...)` — the `key` field contains the plaintext API key value. 2. **POST (Import):** Accepts arbitrary JSON and performs a complete database wipe-and-replace in a transaction (lines 102-163 in `src/lib/db/index.js`). This replaces all settings including the password hash, effectively allowing an attacker to set their own password. 3. The exported data includes `apiKeys` with their plaintext `key` values, `providerConnections` with all OAuth tokens, and `settings` with OIDC client secrets. ### Evidence **File:** `src/app/api/settings/database/route.js` ```javascript export async function GET() { const payload = await exportDb(); return NextResponse.json(payload); } export async function POST(request) { const payload = await request.json(); await importDb(payload); // ... } ``` **File:** `src/lib/db/index.js` (lines 96-163) ```javascript export async function importDb(payload) { db.transaction(() => { // Wipe all tables db.run(`DELETE FROM settings`); db.run(`DELETE FROM providerConnections`); db.run(`DELETE FROM providerNodes`); db.run(`DELETE FROM proxyPools`);

Properties

severity
critical
summary
9routers has Exposure of Sensitive Information and Unprotected Database Import/Export, Allowing Complete Credential Theft and Database Takeover
epss_score
0.00387
cvss_score
9.9
ghsa_published
2026-07-06T21:37:49Z
source_url
https://github.com/advisories/GHSA-qvfm-67h2-2qfx
ghsa_updated
2026-07-06T21:37:49Z
ghsa_id
GHSA-qvfm-67h2-2qfx
cve_id
CVE-2026-55500
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
is_ghsa_only
false
epss_percentile
0.3213

Related Entities (5)

ENRICHED_BY (1)

[Source]FIRST EPSS

VULNERABLE_TO (1)

[Software]npm/9router

AFFECTS (1)

[Software]npm/9router

HAS_WEAKNESS (1)

[Weakness]Exposure of Sensitive Information to an Unauthorized Actor

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-55500 (CVSS 9.9) — Ninja Signal Threat Intelligence | Ninja Signal