CVE-2026-55500

9router (npm) Unprotected Database Import/Export Leading to Credential Theft and Database Takeover (CVE-2026-55500)

CVE-2026-55500 affects the 9router npm package (<= 0.4.71), which exposes an unauthenticated/improperly-protected database import/export interface. Attackers can invoke this exposed functionality to exfiltrate the entire application database — including credentials, session tokens, and configuration secrets — or import a malicious database to achieve full application takeover. CVSS 9.9, CWE-200 (Exposure of Sensitive Information). A public PoC/advisory exists (GHSA-qvfm-67h2-2qfx). Detections focus on anomalous HTTP requests to database export/import endpoints, bulk data egress, unauthenticated administrative API access, and post-exploitation credential misuse.

Vulnerability Intelligence

Public PoC

Affected Software

Vendor
npm
Product
9router
Versions
<= 0.4.71

Weakness (CWE)

Timeline

Disclosed
July 6, 2026

CVSS

9.9
Critical (9.0–10)
CVSS vector not yet published
Read the write-up →

What is CVE-2026-55500 9router (npm) Unprotected Database Import/Export Leading to Credential Theft and Database Takeover (CVE-2026-55500)?

9router (npm) Unprotected Database Import/Export Leading to Credential Theft and Database Takeover (CVE-2026-55500) (CVE-2026-55500) maps to the Initial Access and Credential Access and Collection and Exfiltration tactics — the adversary is trying to get into your network in MITRE ATT&CK.

This page provides production-ready detection logic for 9router (npm) Unprotected Database Import/Export Leading to Credential Theft and Database Takeover (CVE-2026-55500), covering the data sources and telemetry it touches: Azure App Service HTTP Logs, Azure WAF Logs, Network Security Group Flow Logs. The queries below are rated critical severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Initial Access Credential Access Collection Exfiltration
Microsoft Sentinel / Defender
kusto
let ExportPaths = dynamic(["/api/export","/api/db/export","/api/database/export","/api/import","/api/db/import","/api/backup","/api/backup/download"]);
let SuspiciousAgents = dynamic(["curl","python-requests","Go-http-client","HTTPie","axios"]);
AppServiceHTTPLogs
| where TimeGenerated > ago(24h)
| where CsUriStem has_any (ExportPaths)
| extend HasAuthHeader = tostring(parse_json(Cookie))
| where isempty(HasAuthHeader) or UserAgent has_any (SuspiciousAgents)
| summarize RequestCount = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Paths = make_set(CsUriStem), Agents = make_set(UserAgent) by CIp
| where RequestCount >= 1
| project CIp, RequestCount, FirstSeen, LastSeen, Paths, Agents

Detects requests to 9router database export/import endpoints without authentication cookies or from scripted/automation user agents, indicative of exploitation of CVE-2026-55500.

critical severity medium confidence

Data Sources

Azure App Service HTTP Logs Azure WAF Logs Network Security Group Flow Logs

Required Tables

AppServiceHTTPLogs

False Positives

  • Legitimate scheduled database backup jobs from internal automation using scripted user agents
  • Authorized admin exports performed via CLI/curl by operations staff
  • Monitoring/health-check tools polling similar path names for unrelated services

Sigma rule & cross-platform mapping

The detection logic for 9router (npm) Unprotected Database Import/Export Leading to Credential Theft and Database Takeover (CVE-2026-55500) (CVE-2026-55500) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: network_connection
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Simulate Unauthenticated Database Export Request

    Expected signal: Web server access log entry showing GET/POST to /api/db/export with no Authorization or session cookie header, response status 200 and non-trivial body size.

  2. Test 2Simulate Unauthorized Database Import

    Expected signal: Web server log entry for POST to /api/db/import with multipart file upload and no auth header; application log showing database write/replace event.

  3. Test 3Scripted Reconnaissance of Export/Import/Backup Endpoints

    Expected signal: Multiple sequential unauthenticated HTTP requests from a single source IP to distinct export/import/backup paths within a short time window, with a scripted (non-browser) User-Agent.


Response Playbook

Triage

  1. Confirm whether the affected host runs a vulnerable 9router npm package version (<= 0.4.71) by checking package.json/package-lock.json or node_modules metadata.
  2. Review web/proxy logs for requests to export, import, or backup-related endpoints in the timeframe of interest, correlating source IPs with known/authorized administrative addresses.
  3. Determine if any export/import endpoint returned a 200 status with a large response body, indicating successful data exfiltration or database replacement.
  4. Check application/database logs for anomalous authentication events, new admin accounts, or credential changes following suspected exploitation.

Containment

  1. Immediately restrict or disable public access to the 9router database export/import endpoints via WAF rule, reverse proxy ACL, or network segmentation.
  2. Upgrade 9router to a patched version above 0.4.71 or apply the vendor-recommended mitigation from GHSA-qvfm-67h2-2qfx; if no patch is available, take the export/import feature offline until authentication is enforced.

Evidence Collection

  1. Preserve web server, proxy, and WAF logs covering the suspected exploitation window, including full request/response headers and bodies where available.
  2. Export a copy of the current application database (if not already compromised) and any modified/imported database files for forensic comparison and integrity verification.

Escalation Criteria

  • ! Evidence of successful database export (large response bodies, confirmed 200 status on export endpoints) — escalate to incident response for full credential compromise assessment.
  • ! Any indication of an unauthorized database import (data replacement) or new/modified admin credentials post-exploitation — escalate as suspected full application takeover.

Investigation Guide

Forensic Artifacts

  • > Web/proxy access logs showing requests to export/import/backup URIs
  • > Exported database dump files (if written to disk or cached by a CDN/proxy)
  • > Application audit logs reflecting new or modified admin/user accounts post-exploitation
  • > npm package manifest (package.json/package-lock.json) confirming 9router version

Tuning Guidance

Baseline legitimate automation (scheduled backups, CI/CD data migrations) that intentionally calls export/import endpoints and allowlist those specific source IPs/service accounts. Tighten the 'unauthenticated' condition if your environment strips auth headers at a load balancer, since that will otherwise generate false positives; instead correlate with backend application logs that retain the authenticated session context. Increase severity/priority for any hit where response size exceeds typical page sizes (>50KB) as this strongly suggests a full database dump rather than incidental endpoint discovery.


Hunting Queries

Broad hunt across all historical logs for any interaction (authenticated or not) with 9router export/import/backup endpoints, to establish a baseline and identify outliers over time.

Hunting — KQL
kql
AppServiceHTTPLogs
| where CsUriStem has_any ("export","import","backup")
| summarize count(), make_set(UserAgent) by CIp, bin(TimeGenerated, 1h)
| sort by count_ desc
Hunting — SPL
spl
index=web uri="*export*" OR uri="*import*" OR uri="*backup*"
| stats count by clientip, useragent
| sort -count

Atomic Red Team Tests

Test 1 Simulate Unauthenticated Database Export Request
linux

Sends an unauthenticated HTTP GET/POST request to a lab instance of 9router's database export endpoint to validate detection of exfiltration attempts.

Command

bash
curl -s -o /tmp/9router_export_test.db -w '%{http_code}\n' http://localhost:8080/api/db/export

Cleanup

bash
rm -f /tmp/9router_export_test.db

Expected Telemetry

Web server access log entry showing GET/POST to /api/db/export with no Authorization or session cookie header, response status 200 and non-trivial body size.

Expected Detection

KQL/SPL rules alert on the unauthenticated export request; response size correlation confirms likely successful data retrieval.

Test 2 Simulate Unauthorized Database Import
linux

Attempts to POST a malicious/test database file to the 9router import endpoint in a lab environment to validate detection of database takeover attempts.

Command

bash
curl -s -X POST -F 'file=@/tmp/malicious_test.db' http://localhost:8080/api/db/import

Cleanup

bash
rm -f /tmp/malicious_test.db; restore lab database from known-good snapshot

Expected Telemetry

Web server log entry for POST to /api/db/import with multipart file upload and no auth header; application log showing database write/replace event.

Expected Detection

Detection rules flag the unauthenticated import request; application audit logging shows unexpected database modification correlating to the same source IP.

Test 3 Scripted Reconnaissance of Export/Import/Backup Endpoints
windows

Uses a scripted HTTP client to enumerate common 9router export/import/backup paths, emulating attacker reconnaissance prior to exploitation.

Command

powershell
powershell -Command "$paths = @('/api/export','/api/import','/api/backup','/api/db/export','/api/db/import'); foreach ($p in $paths) { try { Invoke-WebRequest -Uri (\"http://localhost:8080\" + $p) -UseBasicParsing -TimeoutSec 5 } catch {} }"

Cleanup

powershell
No persistent changes; clear PowerShell command history if required by lab policy.

Expected Telemetry

Multiple sequential unauthenticated HTTP requests from a single source IP to distinct export/import/backup paths within a short time window, with a scripted (non-browser) User-Agent.

Expected Detection

Detection logic identifying scripted user agents and burst requests to sensitive endpoint patterns triggers an alert for reconnaissance activity preceding CVE-2026-55500 exploitation.

Related Detections