$ cat research/9router-api-security.md
9Router API Security Research
One coordinated open-source review resulting in three CVE IDs. The work focused on authentication boundaries, authorization checks, secret handling, and privacy risks in AI request data.
Research approach
- 1Mapped dashboard API routes and identified operations handling provider credentials, usage data, and request history.
- 2Reviewed server-side route handlers for authentication, authorization, ownership checks, and secret masking.
- 3Reproduced findings in a controlled local environment and documented impact without targeting third-party deployments.
- 4Coordinated publication through the project security advisory and public CVE records.
Scope and focus
$ ls findings/
Assigned CVE findings
These records belong to the same coordinated research case. Each card links to the public NVD entry and the upstream GitHub Security Advisory.
Unauthenticated provider-management API access
/api/providers/*
Summary
Provider-management routes accepted requests without authentication, allowing remote users to enumerate, create, modify, or delete provider connections.
Impact
An attacker could expose partial credentials and OAuth metadata, redirect AI traffic through attacker-controlled providers, alter existing connections, or delete providers and cause service disruption.
Root cause
Sensitive Next.js API routes performed provider CRUD operations without centralized server-side authentication and authorization checks.
affected
9Router <= 0.4.41
weakness
CWE-306
Recommended remediation
- Require authentication and authorization for every provider-management operation.
- Return only the minimum provider metadata needed by the dashboard.
- Audit provider changes and apply least-privilege access controls.
Plaintext AI provider API-key exposure
/api/usage/stats
Summary
An unauthenticated usage endpoint returned complete provider API keys together with usage and billing metadata.
Impact
Exposed keys could be reused against connected AI providers, leading to unauthorized consumption, billing fraud, and quota exhaustion.
Root cause
The usage API lacked authentication and returned full secret values instead of masked identifiers.
affected
9Router <= 0.4.41
weakness
CWE-306 · CWE-522
Recommended remediation
- Protect all usage endpoints with server-side authentication.
- Never include full API keys or OAuth secrets in API responses.
- Rotate credentials that may have been exposed and retain only masked key fingerprints.
AI request-log and conversation-history disclosure
/api/usage/request-logs and /api/usage/request-details/*
Summary
Unprotected usage routes exposed request metadata and complete AI conversation histories to unauthenticated users.
Impact
The disclosed records could contain system prompts, user messages, assistant responses, tool calls, and user email addresses.
Root cause
Request-log and request-detail handlers lacked authentication and ownership checks before returning sensitive session data.
affected
9Router <= 0.4.41
weakness
CWE-359 · CWE-862
Recommended remediation
- Require authentication for all request-history endpoints.
- Enforce per-user or per-tenant ownership checks before returning records.
- Minimize retained conversation content and redact sensitive fields in logs.
Shared root cause
Sensitive Next.js API handlers did not consistently enforce server-side authentication, authorization, ownership checks, and secret masking. The findings demonstrate why dashboard protection alone is not a security boundary when API routes remain directly reachable.
The durable fix is centralized authentication for sensitive API namespaces, explicit resource authorization, tenant isolation, and response minimization for credentials and conversation data.
Responsible research
The research shown here concerns open-source software and was reproduced in a controlled environment. No third-party deployment, private credential, or user conversation is included on this site.
Public content is limited to impact, root cause, defensive remediation, and links to already published advisory records.
public references
Upstream advisory
The coordinated case is published as GHSA-vjc7-jrh9-9j86 and credits newnol as the reporter. Individual CVE cards above link to the corresponding NVD records.
Open GHSA-vjc7-jrh9-9j86