Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app fetching user URLs via safeurl blacklist mode
-
DeliveryCraft internal target as IPv6 literal or AAAA-only/unresolvable-IPv4 host
-
Exploitsafeurl matches no IPv4 range, returns URL as valid
-
ExecutionServer issues request to internal destination
-
ImpactRead internal service/metadata response (SSRF)
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 | Requires an application that uses safeurl (>=0.1.0) in its default blacklist/blocklist mode to validate attacker-influenced URLs before making requests; deployments using the allowlist/whitelist option are NOT vulnerable because unmatched addresses are rejected there. The attacker must be able to supply or influence a URL that the application passes to SafeURL.get/validate_url, and must express the internal target so it evades IPv4-only matching: as an IPv6 literal address, as a hostname whose blocklist entry is IPv6 (never matches), or as a host that resolves to no IPv4 address (AAAA-only or non-resolving), which is accepted regardless of destination. No authentication or user interaction is required at the library layer. |
| Impact | This is a genuine SSRF-protection-bypass in a defensive library, but the real-world urgency signals are mixed. The vendor CVSS 4.0 score of 9.0 is driven by VC:H/SC:H (reading internal resources across a scope boundary) with PR:N/UI:N, reflecting that an attacker who controls a validated URL can reach blocked internal destinations. However, EPSS is only 0.46% (39th percentile), there is no CISA KEV listing, and no public exploit code was identified - so this is not evidence of active, widespread exploitation. The AT:P in the 4.0 vector correctly signals a real precondition: the flaw only matters for deployments using safeurl's default blacklist/blocklist mode; allowlist deployments are explicitly unaffected because an unmatched address is rejected there. The high score is defensible for affected deployments, but this is a niche Elixir library (not even published to Hex, installed from GitHub), so aggregate exposure is limited. Net: high technical severity where deployed, low likelihood of mass exploitation - prioritize for the small population that actually depends on safeurl in blacklist mode. |
| Exploit ScenarioDerived | An application uses SafeURL in its default blacklist mode to vet user-supplied URLs (e.g., a webhook or link-preview feature) before fetching them, trusting it to block internal targets. The attacker submits the internal target as an IPv6 literal, or as a hostname that has only a AAAA (IPv6) record or no IPv4 address at all; safeurl matches nothing against its IPv4-only reserved/blocklist and returns the URL as safe, so the server issues the request to the internal destination. No public proof-of-concept was identified, but the bypass is deterministic and trivial to reproduce given the described IPv4-only matching logic. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Server-Side Request Forgery protection bypass in the Elixir safeurl library (versions 0.1.0 and later) allows unauthenticated attackers who can influence a URL passed to SafeURL.get/validate_url to reach internal or reserved network destinations that the library is configured to block. The root cause is IPv4-only blocklist matching: a destination rejected as an IPv4 address is accepted when expressed as an IPv6 literal, IPv6 entries in the blocklist never match, and a hostname that resolves to no IPv4 address is accepted regardless of where it actually points; deployments using the library's allowlist (whitelist) option are not affected because unmatched addresses are rejected there. Exploitation requires an application running safeurl in its default blacklist/blocklist mode with attacker-influenced URLs; there is no public exploit identified at time of analysis, CISA KEV does not list this CVE, and EPSS is low at 0.46% (39th percentile), so urgency is driven by the defensive nature of the component rather than observed attack activity. CVSS is rated 9.0 by the CNA, with an independent assessment of CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N reflecting high confidentiality impact, low integrity impact, and changed scope.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed - the referenced remediation is commit feabbd0a13f83028ab24b71710526e9da9841f70 in github.com/slab/safeurl-elixir, so consumers should track that commit or any subsequent tagged release rather than assuming a specific Hex version. Because safeurl is a dependency rather than a service, the fastest safe action for exposed applications that cannot immediately update is to switch from blocklist mode to allowlist mode via the :whitelist option, which rejects any address that matches no configured entry and is unaffected by this flaw; the trade-off is that legitimate outbound destinations must be explicitly enumerated and any unlisted host will start returning {:error, :restricted}. Adding IPv6 CIDRs to the :blacklist parameter is NOT a valid workaround, since the advisory confirms IPv6 blocklist entries never match. Additional compensating controls with their trade-offs: disallow IPv6 literal addresses and reject hostnames that resolve to no IPv4 address at the application layer before calling SafeURL.get/validate_url (trade-off: breaks legitimate AAAA-only destinations); resolve the hostname yourself, validate the returned address family and range against both IPv4 and IPv6 reserved space, and pin/reuse the resolved IP for the actual connection to avoid DNS rebinding (trade-off: extra implementation complexity and possible breakage of virtual-host/TLS SNI setups); and enforce network-level egress policy that denies traffic from application hosts to RFC1918, loopback, link-local, and IPv6 unique-local/link-local ranges (trade-off: requires egress firewall or service-mesh management and can disrupt unrelated internal integrations if scoped too broadly). Vendor guidance and version specifics should be confirmed against the CNA advisory at https://cna.erlef.org/cves/CVE-2026-77866.html and the OSV record https://osv.dev/vulnerability/EEF-CVE-2026-77866.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
safeurl is an Elixir defensive library (licensed MIT, from Slab/Include Security) that wraps HTTPoison and is intended to mitigate CWE-918 Server-Side Request Forgery by resolving the IP address of a supplied URL and validating it against a blacklist of reserved/private CIDR ranges or a whitelist before issuing the request. Internally it defines a @reserved_ranges list consisting entirely of IPv4 CIDRs (0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/29, 192.0.2.0/24, 192.88.99.0/24, 192.168.0.0/16, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4) and matches candidate destinations only against IPv4 addresses. Because the comparison is IPv4-only, three distinct bypass classes exist: (1) IPv6 literal addresses such as ::1 or unique-local/link-local IPv6 ranges are never checked against the reserved list and are therefore permitted; (2) any IPv6 CIDR a developer adds via the :blacklist parameter can never match, so those entries are inert; and (3) hostnames that resolve to no IPv4 address at all (AAAA-only records or non-resolving names) are treated as matching nothing and are accepted regardless of the actual destination. The advisory explicitly notes that allowlist/whitelist mode is not affected, because there an address that matches no configured entry is rejected by default - the failure mode is specific to the default-deny-by-blocklist design. The referenced upstream fix commit is feabbd0a13f83028ab24b71710526e9da9841f70 in the github.com/slab/safeurl-elixir repository.
Know when Safeurl 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:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N
Remote, low-complexity bypass of a filter with no privileges or interaction; SSRF crosses into internal systems (S:C) primarily disclosing data (C:H), limited integrity (I:L), no availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Server-Side Request Forgery (SSRF) vulnerability in Slab safeurl allows an attacker who controls a validated URL to reach internal network destinations the library is configured to block.
Only IPv4 addresses are matched against the reserved ranges and the blocklist. Every other address is treated as matching nothing, so a destination that is rejected in its IPv4 form is accepted when written as an IPv6 address, IPv6 entries in the blocklist never match, and a host that resolves to no IPv4 address is accepted regardless of where it points. Deployments that rely on the allowlist instead are unaffected, because there an unmatched address is rejected.
This issue affects safeurl: from 0.1.0 onward.
Executive ViewAI
The Elixir safeurl library versions 0.1.0 and later contains a critical server-side request forgery protection bypass that can allow attacker-influenced URLs to reach internal or reserved network destinations in default blocklist deployments. Organizations running Elixir applications that rely on safeurl's default blocklist mode and accept external URL input are exposed to potential internal service access and data exposure. Leadership should prioritize inventory and mitigation because no vendor-released patch identified at time of analysis, although no public exploit identified at time of analysis and allowlist configurations are not affected.
No vendor-released patch identified at time of analysis. Interim mitigations include switching to safeurl's allowlist mode, enforcing network egress controls to block internal and reserved destinations, normalizing and validating all attacker-influenced URLs before SafeURL.get/validate_url, restricting cloud metadata access, and monitoring vendor advisories for a fixed version.
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.
EUVD-2026-78678
GHSA-97fv-h8pq-9grg
NVD
CVE.org
EPSS
VulDB
Exploit-DB