Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft URL with percent-encoded bracketed IPv6 or trailing-dot IP
-
DeliverySubmit to app using hackney allowlist
-
ExploitAllowlist parser fails to classify host as an IP literal
-
Executionhackney normalize/connect reaches the literal loopback/internal address
-
ImpactAccess internal service or metadata endpoint
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service Interpretation consistency
|
| Exploitation Conditions | Exploitation requires a consuming application that (1) builds an SSRF host allowlist/denylist using uri_string:parse/1 and inet:parse_address/1, and (2) passes the attacker-influenced URL (or a followed redirect Location) to hackney versions 4.0.1 up to but not including 4.9.0. The attacker must supply the host in one of two exact spellings: a percent-encoded bracketed IPv6 literal (e.g. %5B%3A%3Affff%3A127%2E0%2E0%2E1%5D decoding to [::ffff:127.0.0.1]) or an IP literal with a trailing dot (e.g. 127.0.0.1.). Limiting factors: unencoded IPv6 literals and domain names with a trailing dot are NOT affected; the bypass is meaningless unless the application relies on the vulnerable validation pattern; and applications on 4.9.0 or later are protected. No authentication is indicated by the vector (PR:N), and no user interaction is required (UI:N). |
| Impact | This is a genuine but moderate-priority SSRF (CVSS 4.0 base 6.9, Medium; CWE-436 Interpretation Conflict). The decision signals are consistent and point to urgency below the top tier: the vuln.today priority label is 'this_month', not act_now/emergency; there is no CISA KEV listing and no EPSS score supplied; and no public exploit is identified. A vendor patch (4.9.0) is confirmed available. Realistic risk is gated heavily by the exploitation pre-condition: the flaw only matters to applications that build an SSRF allowlist/denylist using uri_string:parse/1 plus inet:parse_address/1 and then pass the host to hackney - exactly the defensive pattern CVE-2026-47076 was meant to protect, which this bypasses. Where that pattern is used, impact is real (internal/loopback reachability, confidentiality of internal services). A notable signal conflict: the supplied CVSS 4.0 vector uses AV:L (local), whereas SSRF driven by an attacker-supplied URL or redirect Location is typically network-reachable (AV:N) when the consuming app accepts remote input - the effective vector depends on how the downstream application sources the URL, so verify against your own data flow rather than assuming local-only access. No integrity or availability impact is indicated by the metrics (VI:N/VA:N). |
| Exploit ScenarioDerived | An application uses hackney with an SSRF allowlist that validates the destination host via uri_string:parse/1 and inet:parse_address/1 before fetching a user-supplied URL. The attacker submits a host such as %5B%3A%3Affff%3A127%2E0%2E0%2E1%5D (decoding to [::ffff:127.0.0.1]) or 127.0.0.1. with a trailing dot; the allowlist does not recognize these as IP literals and permits them, but hackney's connect path strips the brackets / ignores the trailing dot and connects to the loopback/internal address anyway. No public exploit code is identified at time of analysis; the same bypass applies to a redirect Location when redirects are followed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 26, 2026
Server-side request forgery in the Erlang hackney HTTP client (versions 4.0.1 up to but not including 4.9.0) lets an attacker steer outbound requests to loopback or private addresses that the calling application believes its SSRF allowlist has already rejected. Two host spellings slip past the check - a percent-encoded bracketed IPv6 literal such as %5B%3A%3Affff%3A127%2E0%2E0%2E1%5D (decoding to [::ffff:127.0.0.1]) and an IP literal with a trailing dot such as 127.0.0.1. - because the caller's validation parses them differently from hackney's connect path; the same applies to a redirect Location target when redirects are followed. Exploitation is conditional on a consuming application that builds its allowlist with uri_string:parse/1 and inet_parse_address/1 and then passes an attacker-influenced URL to a vulnerable hackney release, so attack complexity is high and the CNA scores the issue 6.9 (Medium) under CVSS 4.0; no public exploit has been identified at time of analysis.
RemediationAI
Vendor-released patch: hackney 4.9.0 - upgrade any 4.0.1 through 4.8.x dependency to 4.9.0, which refuses URLs that hide a loopback or private IP behind a percent-encoded bracketed IPv6 literal or a trailing dot (release notes: https://github.com/benoitc/hackney/releases/tag/4.9.0; advisory: https://cna.erlef.org/cves/CVE-2026-115700.html; fix commits f19561a0b422376348c91537e51377ab7325f4ee and 452620a92ec1da2e6b4862a049a2a4f04b42068f via PR https://github.com/benoitc/hackney/pull/987). The advisory and release notes present that normalization change as the fix and document no separate workaround, so an application that cannot upgrade immediately remains exposed whenever it passes attacker-influenced URLs or followed redirect targets into hackney while relying on the uri_string:parse/1 plus inet_parse_address/1 pattern for its SSRF allowlist; upgrading to 4.9.0 additionally picks up the same release's fixes for CA pinning bypass, basic_auth/cookie forwarding on cross-port or HTTPS-to-HTTP redirects, unbounded buffered and auto-decompressed response bodies, CONNECT proxy certificate verification, and CR/LF/NUL injection through proxy_auth_fun, which are worth scheduling together with this update.
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 root cause is an interpretation conflict (CWE-436) between two Erlang URL/address parsers used on the same input. hackney_url:normalize/2 applies an IP-literal gate to the percent-decoded host and hands the decoded value as-is to inet_parse:address/1; a bracketed IPv6 literal that only becomes bracketed after percent-decoding, or an IPv4 literal with a trailing dot, is not recognised as an address by that call, so the value is treated as a hostname. The connect path then disagrees: hackney_happy:parse_address/1 drops a surrounding bracket pair before connecting, and the resolver ignores a trailing dot, so both spellings still reach the literal address they denote. The gate itself was introduced to close the percent-encoded IP bypass of CVE-2026-47076 and does not cover these two variants. Unencoded IPv6 literals and domain names with a trailing dot behave consistently across both parsers and are not affected. The project addressed the gap in 4.9.0, which refuses URLs that hide a loopback or private IP inside a percent-encoded bracketed IPv6 address or behind a trailing dot (PR #987, commits f19561a0b422376348c91537e51377ab7325f4ee and 452620a92ec1da2e6b4862a049a2a4f04b42068f); the same release also hardened CA pinning, redirect credential forwarding, response body limits and CONNECT proxy certificate checks. The CNA scores it 6.9 under CVSS 4.0, and the assessed severity is CVSS 3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N - high attack complexity reflects the dependency on the consumer's specific validation pattern rather than any timing or race condition, and the vector indicates no privileges and no user interaction are required.
Know when Hackney 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:L/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
SSRF from an attacker-supplied URL is network-reachable (AV:N); the specific allowlist pattern and crafted encoding make it AC:H; no auth (PR:N) and the reached internal system is a scope change (S:C, C:H).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Interpretation Conflict vulnerability in hackney_url in benoitc hackney allows Server Side Request Forgery via a percent-encoded bracketed IPv6 literal or an IP literal with a trailing dot. A host such as %5B%3A%3Affff%3A127%2E0%2E0%2E1%5D (decoding to [::ffff:127.0.0.1]) or 127.0.0.1. is not an IP address to a caller's allowlist built on uri_string:parse/1 and inet:parse_address/1, while hackney connects to the address it denotes. The same applies to a Location target when redirects are followed.
The IP-literal gate that hackney_url:normalize/2 applies to a percent-decoded host, added to close the percent-encoded IP bypass of CVE-2026-47076, passes the decoded value to inet_parse:address/1 as is. The connect path in hackney_happy:parse_address/1 drops a surrounding bracket pair, and the resolver ignores a trailing dot, so both forms pass the gate and still reach the literal address. Domain names with a trailing dot and unencoded IPv6 literals are not affected.
This issue affects hackney: from 4.0.1 before 4.9.0.
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.
Denial of service in benoitc hackney (Erlang HTTP client) versions 2.0.0 through 4.0.0 allows a malicious WebSocket serv
Denial of service in benoitc hackney (Erlang HTTP client) 2.0.0 through 4.0.0 allows remote unauthenticated attackers to
Denial-of-service in benoitc's hackney Erlang HTTP client (versions 2.0.0-beta.1 through 4.0.0) allows any HTTP origin s
Remote denial of service in benoitc hackney 2.0.0 through 4.0.0 lets a malicious HTTP/3 server exhaust a client's BEAM p
Denial of service in benoitc hackney (Erlang HTTP client) versions 0.10.0 through 4.0.0 lets a hostile SOCKS5 or HTTP CO
CRLF injection in hackney (Erlang HTTP client, versions 2.0.0-4.0.1) enables header injection into outbound WebSocket up
SSRF allowlist bypass in hackney (Erlang HTTP client) versions 0.13.0 through before 4.0.1 allows attackers who control
HTTP Request Splitting via CRLF injection in hackney, the Erlang/Elixir HTTP client library, allows an attacker who cont
Credential leakage in the hackney Erlang HTTP client library (versions 3.1.1 through before 4.0.1) allows a malicious or
Improper certificate validation in the Erlang HTTP client hackney (1.24.0 through 4.8.x) lets an on-path attacker impers
Memory exhaustion in the Erlang hackney HTTP client (2.0.0-beta.1 through 4.8.x) lets any server the client requests for
CRLF injection in the hackney Erlang HTTP client library's hackney_cookie:setcookie/3 function enables HTTP response spl
EUVD-2026-109834
GHSA-8c7g-m8h7-q24x
NVD
CVE.org
EPSS
Exploit-DB