Skip to main content

safeurl EUVDEUVD-2026-78678

| CVE-2026-77866 CRITICAL
Server-Side Request Forgery (SSRF) (CWE-918)
2026-09-15 EEF GHSA-97fv-h8pq-9grg
9.0
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Identify app fetching user URLs via safeurl blacklist mode
  2. Delivery
    Craft internal target as IPv6 literal or AAAA-only/unresolvable-IPv4 host
  3. Exploit
    safeurl matches no IPv4 range, returns URL as valid
  4. Execution
    Server issues request to internal destination
  5. Impact
    Read 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
No patch listed yet 0.5% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

safeurl 0.1.0 <*
safeurl feabbd0a13f83028ab24b71710526e9da9841f70 <*

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

Vendor (EEF) PRIMARY 9.0 CRITICAL
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
vuln.today AI 9.3 CRITICAL

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.

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

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

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

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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.5%
Top 61% exploitable
Prevalence
Low
niche Elixir SSRF-guard library, not published to Hex, installed from GitHub
Data Quality
6 sources
Confidence: High

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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.5%
Patch available No
Active threat No
Deciding rule
CRITICAL severity
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
Yes
Human Impact
High

Priority Score

45
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +45
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.

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