Skip to main content

9router EUVDEUVD-2026-63681

| CVE-2026-72860 MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-08-20 VulnCheck GHSA-cqgh-7h49-q3mr
6.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate to 9router dashboard
  2. Delivery
    Send POST /api/provider-nodes/validate with IPv4-mapped IPv6 baseUrl
  3. Exploit
    SSRF guard regex fails on WHATWG-canonicalized hostname
  4. Execution
    Server issues HTTP request to loopback or cloud metadata target
  5. Impact
    200-byte internal response body returned to attacker

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Default configuration requires a valid 9router dashboard session (PR:L); if the requireLogin setting is disabled, no authentication is required and exploitation is open to any network-reachable caller. The vulnerable endpoint is POST /api/provider-nodes/validate, which must not be blocked by an intermediary control such as a WAF or API gateway. The partial response disclosure path (200-byte truncation) is triggered only when the custom-embedding validation type is invoked and the internal service returns a non-2xx, non-401, non-403 status; other validation types remain usable for blind port scanning via status codes and timing. The DNS-hostname bypass (a named host resolving to an internal IP) requires that no egress DNS filtering or firewall prevents outbound connections from the 9router host. No user interaction, no client-side component, and no non-default server configuration beyond disabling requireLogin are needed for the primary IPv6-mapped bypass.

Impact

The CVSS 3.1 score of 8.5 (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N) accurately reflects the network-accessible exploitation surface, low attack complexity, and changed scope reaching internal infrastructure. The PR:L rating is correct for the default configuration requiring a dashboard session; if requireLogin is disabled, the effective privilege requirement drops to PR:N, raising real-world risk substantially beyond the scored value. No EPSS score or CISA KEV listing appears in the available intelligence, meaning no confirmed active exploitation exists at time of analysis. However, the bypass is mechanically trivial once understood - the full technique is derivable from the publicly available fix PR diff (#3370) and the detailed GitHub issue (#3293) without additional reverse engineering. The partial response disclosure (200-byte truncation on error status codes) and blind port-scanning capability via status and timing differences add concrete post-SSRF utility beyond theoretical access. A residual DNS-rebinding gap acknowledged in the PR comment means that even after the IPv6 fix is applied, the guard remains bypassable via hostname-to-internal-IP resolution - defenders operating any version of this product should layer egress firewall controls regardless of patch status.

Exploit ScenarioDerived

An attacker holding a valid 9router dashboard session sends POST /api/provider-nodes/validate with baseUrl set to http://[::ffff:a9fe:a9fe]/latest/meta-data/ (the AWS EC2 instance metadata endpoint encoded as an IPv4-mapped IPv6 address in WHATWG-canonicalized hextet form). The SSRF guard's regex fails to match the canonicalized hostname, the application issues the request server-side, and the first 200 bytes of the metadata response are returned to the attacker via the custom-embedding error path. No public exploit code has been identified, but the technique is fully derivable from the public fix PR diff and issue discussion.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 20, 2026

Server-side request forgery in decolua 9router ≤ 0.5.55 allows session-authenticated users (or unauthenticated callers when requireLogin is disabled) to reach internal network resources via the POST /api/provider-nodes/validate endpoint. The SSRF guard's IPv4-mapped IPv6 branch is structurally unreachable: WHATWG URL canonicalization rewrites dotted-quad notation to hextet form before the string regex is evaluated, so addresses such as http://[::ffff:7f00:1] (loopback) and http://[::ffff:a9fe:a9fe] (cloud metadata) pass unchecked. No public exploit has been identified at time of analysis, though the root cause and bypass technique are fully documented in the public GitHub issue and fix PR.

RemediationAI

Upstream fix is available as pull request #3370 (https://github.com/decolua/9router/pull/3370), which replaces the unreachable string-regex IPv6 check with a byte-level normalization function (ipv6ToBytes) that correctly handles WHATWG-canonicalized addresses in both hextet and dotted-quad spellings. A released tagged version incorporating this fix has not been independently confirmed - the fix exists only as an open PR at time of analysis. Until a patched release ships, operators should: disable or firewall the POST /api/provider-nodes/validate endpoint if not operationally required (trade-off: loss of provider-node validation functionality); ensure requireLogin remains enabled, since disabling it eliminates the authentication barrier entirely; and deploy host-level egress filtering on the 9router server blocking outbound connections to 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, and ::1, noting that firewall controls cannot defend against DNS-rebinding attacks and do not substitute for fixing the application-layer guard. Reference: https://www.vulncheck.com/advisories/9router-server-side-request-forgery-via-api-provider-nodes-validate-because-the-ipv4-mapped-ipv6-denylist-check-is-unreachable

Affected VersionsENISA

9router 0 ≤0.5.55

Affected Packages

euvd 9router no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability resides in assertPublicUrl within src/shared/utils/ssrfGuard.js (CPE: cpe:2.3:a:decolua:9router:*:*:*:*:*:*:*:*). The function guards the POST /api/provider-nodes/validate route, which accepts a caller-supplied baseUrl and issues server-side HTTP requests to it. The WHATWG URL standard - as implemented by Node.js new URL() - canonicalizes an IPv4-mapped IPv6 address from its dotted-quad spelling (::ffff:127.0.0.1) to pure hextet form (::ffff:7f00:1) before any application code sees the hostname. The guard's regex ^::ffff:(\d+\.\d+\.\d+\.\d+)$ therefore never matches anything produced by the parser, rendering the entire v4-mapped protection branch dead code. Because the guard also performs no DNS resolution, hostnames whose A records resolve to RFC 1918 or loopback addresses pass unchecked as well. A secondary disclosure path exists in the custom-embedding branch: the upstream response body is truncated to 200 bytes and returned to the caller when the upstream status is neither 2xx, 401, nor 403, leaking the beginning of internal responses. The caller-supplied apiKey is forwarded as an Authorization Bearer header to whatever internal destination is reached. CWE-918 (Server-Side Request Forgery) is the correct root-cause classification.

Know when 9Router gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 6.3 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:L/SA:N
vuln.today AI 8.5 HIGH

Network-reachable endpoint, trivial bypass complexity; PR:L reflects mandatory default session authentication; S:C captures internal infrastructure reach; I:L covers apiKey forwarding to internal targets.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
High
Subsequent system: Integrity
Low
Subsequent system: Availability
None

Lifecycle Timeline

2
Severity Changed
Aug 20, 2026 - 22:22 NVD
HIGH MEDIUM
CVSS changed
Aug 20, 2026 - 22:22 NVD
8.5 (HIGH) 6.3 (MEDIUM)

DescriptionCVE.org

The POST /api/provider-nodes/validate route in 9router takes a caller-supplied baseUrl and issues server-side HTTP requests to it, guarding the destination with assertPublicUrl from src/shared/utils/ssrfGuard.js. That guard compares hostname strings only: it resolves no DNS, does not revalidate after a redirect, and its IPv4-mapped IPv6 branch is unreachable. The branch matches ^::ffff:(\d+\.\d+\.\d+\.\d+)$, but the WHATWG URL parser canonicalizes such literals to hextets before the guard runs, so new URL("http://[::ffff:127.0.0.1]/").hostname yields [::ffff:7f00:1] and the pattern is tested against a string it is never handed. Every IPv4-mapped address therefore passes, and http://[::ffff:7f00:1] and http://[::ffff:a9fe:a9fe] reach loopback and link-local metadata addresses; a hostname whose A record points at an internal address passes as well because no resolution occurs. In the custom-embedding branch the upstream response body is truncated to 200 bytes and returned to the caller whenever the upstream status is neither 2xx nor 401 nor 403, which discloses the beginning of internal responses, and the other validation types remain usable for blind internal port scanning through status and timing differences. The caller-supplied apiKey is forwarded to the internal destination as an Authorization Bearer header. A dashboard session is required by default, and none is required when requireLogin is disabled.

Executive ViewAI

Why It Matters

decolua 9router versions 0.5.55 and earlier contain a server-side request forgery vulnerability in the provider node validation endpoint that allows authenticated users (or unauthenticated users when requireLogin is disabled) to reach internal network resources and cloud metadata services. Organizations using decolua 9router face risk of unauthorized access to internal infrastructure, credentials, and sensitive metadata.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: enforce requireLogin=true to block unauthenticated exploitation; implement network segmentation restricting internal connectivity from application servers; deploy WAF rules blocking POST requests to /api/provider-nodes/validate; disable the endpoint if not operationally required; monitor for anomalous internal network access patterns from affected systems.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Rare
niche open-source router project, limited enterprise footprint
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

CVE-2026-59801 CRITICAL POC
9.3 Jul 13

Unauthenticated CRUD on the provider-management API in 9Router (through 0.4.41) lets remote attackers with no credential

CVE-2026-56677 HIGH POC
8.6 Aug 17

Server-Side Request Forgery (SSRF) in 9Router 0.5.4 and earlier allows unauthenticated remote attackers to probe interna

CVE-2026-56681 HIGH POC
7.3 Sep 22

Authentication bypass in 9Router (npm package '9router') before 0.5.6 lets a remote, unauthenticated attacker reach the

CVE-2026-63732 CRITICAL
9.4 Jul 23

Remote unauthenticated code execution in 9router 0.4.59 (by decolua) lets an attacker chain three flaws - a hardcoded de

CVE-2026-5842 MEDIUM POC
5.5 Apr 09

Remote authorization bypass in decolua 9router up to version 0.3.47 allows unauthenticated network attackers to access t

CVE-2026-56682 MEDIUM POC
5.3 Sep 22

Improper restriction of excessive authentication attempts (CWE-307) in the 9Router AI router package (decolua/9router) b

CVE-2026-62327 CRITICAL
9.3 Jul 13

Unauthenticated API key disclosure in 9Router (npm package '9router' by decolua) through version 0.4.41 lets any remote

CVE-2026-62312 HIGH
8.8 Jul 15

Authenticated remote code execution in 9Router before 0.5.2 lets a logged-in attacker run arbitrary OS commands on the h

CVE-2026-62328 HIGH
8.7 Jul 13

Unauthenticated information disclosure in 9Router (decolua/9router) through version 0.4.41 lets remote attackers read ev

CVE-2026-56679 HIGH POC
8.7 Jul 15

Authentication bypass in 9Router (AI router & token saver) prior to 0.5.4 lets any authenticated user disable applicatio

CVE-2026-55638 HIGH POC
8.6 Jul 10

Authorization-gate bypass in 9Router (decolua/9router) before 0.5.2 lets a remote unauthenticated attacker reach protect

CVE-2026-63313 HIGH
8.3 Jul 23

Server-side request forgery in 9Router before 0.4.72 lets an authenticated (PR:L) or locally-connected user abuse the /v

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy