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 PoCAffected Software
- Vendor
- npm
- Product
- 9router
- Versions
- <= 0.4.71
Weakness (CWE)
Timeline
- Disclosed
- July 6, 2026
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
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.
Data Sources
Required Tables
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:
Platform-specific guides for CVE-2026-55500
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.
- 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.
- 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.
- 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
- 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.
- 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.
- Determine if any export/import endpoint returned a 200 status with a large response body, indicating successful data exfiltration or database replacement.
- Check application/database logs for anomalous authentication events, new admin accounts, or credential changes following suspected exploitation.
Containment
- Immediately restrict or disable public access to the 9router database export/import endpoints via WAF rule, reverse proxy ACL, or network segmentation.
- 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
- Preserve web server, proxy, and WAF logs covering the suspected exploitation window, including full request/response headers and bodies where available.
- 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.
AppServiceHTTPLogs
| where CsUriStem has_any ("export","import","backup")
| summarize count(), make_set(UserAgent) by CIp, bin(TimeGenerated, 1h)
| sort by count_ desc index=web uri="*export*" OR uri="*import*" OR uri="*backup*"
| stats count by clientip, useragent
| sort -count Atomic Red Team Tests
Sends an unauthenticated HTTP GET/POST request to a lab instance of 9router's database export endpoint to validate detection of exfiltration attempts.
Command
curl -s -o /tmp/9router_export_test.db -w '%{http_code}\n' http://localhost:8080/api/db/export Cleanup
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.
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
curl -s -X POST -F 'file=@/tmp/malicious_test.db' http://localhost:8080/api/db/import Cleanup
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.
Uses a scripted HTTP client to enumerate common 9router export/import/backup paths, emulating attacker reconnaissance prior to exploitation.
Command
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
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.