CVE-2026-72860: 9router SSRF via WHATWG IPv6 canonicalization in /api/provider-nodes/validate

CVE-2026-72860 · Severity: high · CVSS 8.5 · Published 2026-08-20

9router is an open-source AI routing service that forwards requests to multiple LLM providers. The POST /api/provider-nodes/validate endpoint accepts a user-supplied URL and makes server-side HTTP requests to validate it. Due to flaws in the hostname validation logic, an attacker can bypass security checks to access internal services, link-local metadata endpoints, or loopback addresses on the 9router host itself, potentially exfiltrating credentials or configuration data.

Quick answers

Is CVE-2026-72860 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-72860 being exploited in the wild.
How severe is CVE-2026-72860?
High severity, with a CVSS score of 8.5, published 20 August 2026.
Which products and versions are affected?
decolua 9router <UNKNOWN>.
Is there a fix for CVE-2026-72860?
No fixed version is recorded yet. Check the vendor's advisory in the references below. If you run it, Junglewise drafts a mitigation that fits your setup and applies it once you approve, with senior security engineers behind it.
How is CVE-2026-72860 attacked?
It is attacked over the network.
Am I affected by CVE-2026-72860?
Check whether anything you run is named in the advisory. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

Technical details

This is a server-side request forgery (SSRF) vulnerability in the assertPublicUrl guard function (src/shared/utils/ssrfGuard.js). The guard performs hostname-only validation and fails to account for WHATWG URL canonicalization: IPv4-mapped IPv6 literals like [::ffff:127.0.0.1] are canonicalized to hextets (e.g., [::ffff:7f00:1]) before validation, causing the regex branch that should block them to never match. Additionally, the guard performs no DNS resolution, allowing hostnames with A records pointing to internal IPs to pass, and does not revalidate after redirects. Attackers can reach 127.0.0.1, 169.254.169.254 (AWS metadata), and other internal addresses. The caller-supplied apiKey is forwarded as an Authorization Bearer header to the internal destination, and truncated response bodies (up to 200 bytes) are returned when the upstream status is not 2xx, 401, or 403, enabling information disclosure. Exploitation requires a dashboard session by default (or no authentication if requireLogin is disabled).

Affected products

  • decolua 9router <UNKNOWN>

Timeline

  • 2026-08-20: disclosed

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.