Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend request to Search Endpoint
-
DeliverySet provider_options.baseUrl to internal target
-
ExploitBypass ssrfGuard via trailing-dot/hex-IPv6/DNS-rebind
-
ExecutionServer fetches attacker-chosen internal URL
-
ImpactExfiltrate cloud metadata or hit internal service
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 | Exploitation requires reaching 9Router's Search Endpoint and controlling the provider_options.baseUrl argument passed into the fetch path in src/shared/utils/ssrfGuard.js; per the vendor CVSS vector no authentication is required (PR:N) and default configurations are affected. To reach internal/private or cloud-metadata targets (e.g. 127.0.0.1, 169.254.169.254, link-local/ULA ranges) the attacker must defeat the pre-patch guard using one of the documented bypass classes: a trailing-dot FQDN ('localhost.'), an IPv4-mapped IPv6 address in the hex representation the URL parser normalizes to ('::ffff:7f00:1'), a hostname that merely resolves to a private address via wildcard DNS (nip.io/sslip.io or an attacker domain pointed at 127.0.0.1), or a public URL that 30x-redirects to an internal target. Limiting factors: exploitation only matters where the server has network reachability to sensitive internal services or a cloud metadata endpoint, and impact is confined to SSRF (no RCE/scope change indicated). |
| Impact | This is a genuine but moderate-severity SSRF (CWE-918) in the open-source decolua/9Router project. The CVSS 4.0 vector (AV:N/AC:L/PR:N/UI:N) describes remote, unauthenticated, low-complexity exploitation, which raises priority, but the impact metrics are all 'Low' (VC:L/VI:L/VA:L) with no scope change (SC:N), so this is a limited-impact SSRF rather than a path to full compromise - consistent with the 6.9 MEDIUM score. No EPSS score, no CISA KEV listing, and no public exploit code are present in the input, so there is no public exploit identified at time of analysis. The patch (PR #3723) and issue #3714 are public and describe the exact guard-bypass classes in detail (trailing-dot hostnames, IPv4-mapped IPv6 in hex form '::ffff:7f00:1', DNS rebinding via nip.io/sslip.io, and redirect-based pivots), which materially lowers the research cost to weaponize even though no POC is published. The core risk is the ability to coerce the server into fetching attacker-chosen internal URLs - notably cloud metadata endpoints (169.254.169.254) that the patch explicitly adds to its blocklist - which could escalate beyond the 'Low' confidentiality rating in cloud deployments. Net: a real but not urgent priority; patch promptly, especially for cloud-hosted instances, but this is not mass-exploited commodity-malware material. |
| Exploit ScenarioDerived | A remote, unauthenticated attacker sends a request to 9Router's Search Endpoint and sets provider_options.baseUrl to an internal address (e.g. a cloud metadata URL or an internal admin service). Because the affected ssrfGuard in versions up to 0.5.55 fails to normalize trailing-dot FQDNs, mishandles hex-form IPv4-mapped IPv6 addresses, and does not re-validate DNS resolution or redirect targets, the attacker bypasses the guard and the server issues the forged request on their behalf. No public POC is identified, but the fixing PR #3723 publicly documents each bypass class. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 01, 2026
Server-side request forgery in decolua 9Router (versions up to and including 0.5.55) lets a remote attacker steer the server's outbound HTTP requests by controlling the provider_options.baseUrl argument handled by the Search Endpoint and its fetch path in src/shared/utils/ssrfGuard.js, potentially reaching loopback services, internal networks, or cloud metadata endpoints such as 169.254.169.254. The vulnerable code is a pre-patch guard that can be defeated through several documented bypass classes (trailing-dot FQDNs like 'localhost.', IPv4-mapped IPv6 addresses in hex form such as '::ffff:7f00:1', wildcard-DNS hostnames that resolve to private addresses, and public URLs that 30x-redirect to internal targets). Per the vendor vector the flaw is unauthenticated (PR:N) and exploitable in default configurations; no public exploit code was identified at time of analysis and CISA KEV does not list this issue, while the upstream project has published a fixing pull request (PR #3723) referencing the reporter's bypass analysis in issue #3714.
RemediationAI
Patch status: an upstream fix is available in the form of GitHub pull request #3723 (the commit/PR that introduces the assertPublicUrl, assertPublicUrlResolved and fetchPublic layers); a released patched version was not independently confirmed from the provided data, so confirm that your deployed 9Router build is at a release that includes PR #3723 before assuming you are fixed, since 0.5.55 and earlier remain vulnerable. If an immediate upgrade is not possible, apply targeted compensating controls with their trade-offs understood: (1) restrict or validate provider_options.baseUrl with a strict allowlist of known search-provider hostnames and reject any caller-supplied base URL from untrusted input, which will break legitimate custom/self-hosted search providers but eliminates the injection point; (2) disable or unexpose the dedicated search-provider path (the tryDedicatedProvider code path in open-sse/handlers/search/index.js) for untrusted users, at the cost of losing that feature; (3) enforce network egress controls on the 9Router host so it cannot reach RFC1918 ranges, loopback, link-local 169.254.0.0/16 (including the 169.254.169.254 metadata endpoint), CGNAT 100.64.0.0/10, and IPv6 ::1/fe80::/10/fc00::/7, which materially reduces SSRF impact but requires network-layer changes; and (4) require IMDSv2 with hop-limit protection on the cloud instance so a metadata request cannot be served without a session token. Track the upstream issue https://github.com/decolua/9router/issues/3714 and pull request https://github.com/decolua/9router/pull/3723, and consult https://vuldb.com/vuln/412342 for advisory updates.
Affected VersionsENISA
Affected Packages
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 issue is a classic CWE-918 server-side request forgery rooted in an incomplete host/IP validation layer rather than a missing feature. 9Router's Search Endpoint (open-sse/handlers/search/index.js) builds a request URL from a user-supplied provider_options.baseUrl and passes it to the ssrfGuard.js code path, which is meant to reject non-public destinations before the DNS/HTTP fetch occurs. The pre-patch guard performed synchronous, literal string checks only: it compared the raw hostname without normalizing a trailing dot (so 'localhost.' slipped past), and its IPv6 check recognized only the dotted IPv4-mapped form '::ffff:a.b.c.d' while the Node/WHATWG URL parser may normalize the same address to hex form ('::ffff:7f00:1'), producing a representation mismatch rather than a simple omission. The upstream fix introduces three layers: assertPublicUrl (cheap literal-IP/hostname rejection at request-build time), assertPublicUrlResolved (adds DNS resolution so hostnames that merely resolve to private/loopback space, e.g. nip.io/sslip.io wildcard DNS or an attacker domain pointed at 127.0.0.1, are still rejected), and fetchPublic (wraps fetch with manual redirect handling so a validated public URL cannot 30x to an internal target without the redirect target being re-validated). The blocklists cover 169.254.0.0/16 (including the 169.254.169.254 cloud metadata address), CGNAT 100.64.0.0/10 (also used by some cloud metadata proxies), IPv6 loopback ::1, unspecified ::, link-local fe80::/10, unique-local fc00::/7, IPv4-mapped ::ffff:0:0/96, NAT64 64:ff9b::/96, and deprecated IPv4-compatible ::a.b.c.d/96 addresses. The patch rewrites IPv6 handling to parse any textual form into eight 16-bit groups and reason about numeric values, which is what makes it immune to 'which textual form did the URL parser pick' bugs.
Know when Node.js 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Remote unauthenticated SSRF reachable by manipulating a request argument (AV:N/AC:L/PR:N/UI:N); limited, non-scope-changing confidentiality/integrity/availability impact per the fetched-resource nature, matching the vendor's all-Low rating.
Primary rating from Vendor (vuldb).
CVSS VectorVendor: vuldb
DescriptionCVE.org
A vulnerability was detected in decolua 9Router up to 0.5.55. The affected element is the function fetch of the file src/shared/utils/ssrfGuard.js of the component Search Endpoint. Performing a manipulation of the argument provider_options.baseUrl results in server-side request forgery. The attack can be initiated remotely. Applying a patch is the recommended action to fix this issue.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-90447
GHSA-ggrj-5337-qvwm
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB