CVE-2026-47076
MediumCVSS 6.5Exploitation Probability (EPSS)
Low risk14th percentile - higher than 14% of all known CVEs
Summary
The hackney library for Erlang/OTP versions 0.13.0 through 4.0.1 contains a Server-Side Request Forgery (SSRF) vulnerability due to an interpretation conflict. The URL normalizer decodes the host after validation, allowing bypass of allowlists and access to internal IP addresses (e.g., 127.0.0.1, 169.254.169.254).
Risk Assessment
An attacker can send requests to internal services such as cloud metadata, RFC1918 networks, or admin interfaces on localhost, potentially leading to data leakage or privilege escalation.
Recommendation
Update the hackney library to version 4.0.1 or later, which includes a fix for this vulnerability.
Other vulnerabilities in hackney
See all- CVE-2026-47077High
A vulnerability in the hackney library (versions 2.0.0 through 4.0.1) allows a Flooding attack due to missing size limits on the HTTP/3 response buffer. A malicious server can send small chunks, resetting the timeout, leading to unbounded memory growth and exhaustion of the BEAM process heap.
- CVE-2026-47075High
hackney before version 4.0.1 does not percent-encode CR (\r) and LF (\n) characters in the URL query component, enabling HTTP Request Splitting. An attacker controlling the URL can inject raw CRLF sequences into the query string, allowing arbitrary HTTP headers or request splitting.
- CVE-2026-47073High
A vulnerability in the hackney library (versions 2.0.0 through 4.0.1) allows memory exhaustion by an attacker-controlled WebSocket server. The WebSocket client does not limit buffer sizes in three code paths, enabling a Flooding attack.
- CVE-2026-47072High
CRLF Injection vulnerability in the hackney library allows an attacker to inject arbitrary HTTP headers into a WebSocket request. Lack of CRLF and NUL filtering at four injection points enables request manipulation, potentially leading to credential spoofing, cache poisoning, or request smuggling via proxies.
- CVE-2026-47071High
The hackney library versions 0.10.0 up to (but not including) 4.0.1 contains an uncontrolled resource consumption vulnerability in the SOCKS5 transport. After SOCKS5 negotiation, the connection is upgraded to TLS with an infinite timeout, allowing a malicious proxy to block the process indefinitely.
- CVE-2026-47070Medium
The hackney library versions 3.1.1 before 4.0.1 is vulnerable to sensitive data exposure. The HTTP/3 module (hackney_h3.erl) does not perform cross-origin checks on redirects, causing authorization headers and cookies to be sent to foreign hosts.
- CVE-2026-47069Medium
A CRLF Injection vulnerability was found in the hackney library (versions from 0.9.0 before 4.0.1) in the hackney_cookie:setcookie/3 function. An attacker controlling the domain or path option can inject a CRLF sequence and arbitrary Set-Cookie headers, leading to HTTP Response Splitting.
- CVE-2026-47067High
The hackney library versions 2.0.0 up to (but not including) 4.0.1 contains a vulnerability that exhausts the BEAM atom table. The URL parser converts unrecognized URL schemes to atoms via binary_to_atom/2, which are never garbage-collected. An attacker can supply many URLs with unique schemes, exceeding the atom table limit and crashing the entire BEAM VM.
- CVE-2026-47066High
The hackney library versions 2.0.0-beta.1 up to (but not including) 4.0.1 contains an infinite loop vulnerability in the Alt-Svc header parser. The parse_token/2 function does not guarantee forward progress for certain bytes, leading to a recursive loop consuming 100% CPU. An Alt-Svc: ! header is sufficient to trigger the vulnerability.
Original NVD description (English source)
Interpretation Conflict vulnerability in benoitc hackney allows Server Side Request Forgery. hackney_url:normalize/2 URL-decodes the host component after the URL has been parsed into a #hackney_url{} record. OTP's uri_string:parse/1 and inet:parse_address/1 do not decode percent-escapes in the host, so a URL such as http://%31%32%37%2E%30%2E%30%2E%31/ is seen by a caller's allowlist validator with host %31%32%37%2E%30%2E%30%2E%31 (not an IP address), which passes the allowlist check. hackney's normalizer then decodes the host to 127.0.0.1 and opens a TCP connection to loopback. Because hackney:request/5 always calls hackney_url:normalize/2 with no opt-out, every request that takes a binary or list URL is affected. The same technique reaches cloud instance metadata services (169.254.169.254), RFC1918 networks, and any admin interface listening on localhost. This issue affects hackney: from 0.13.0 before 4.0.1.

