Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl proxy or MITM the CONNECT path
-
DeliveryReturn 407 with CR/LF/NUL in challenge headers
-
ExploitApp callback echoes bytes into Proxy-Authorization value
-
Executionhackney writes value unchecked into CONNECT retry
-
ImpactInjected header lines reach the proxy
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization HTTP response header sanitization
|
| Exploitation Conditions | Exploitation requires a specific non-default setup: the application must use hackney over an HTTP CONNECT proxy, must configure a proxy_auth_fun callback, the proxy must return a 407, AND the callback must derive its returned binary from untrusted data such as the proxy's challenge headers (not static credentials). Attacker influence therefore depends on controlling or MITM-ing the proxy responses. Limiting factors: callbacks returning static credentials are not attacker-influenced; other CONNECT-path values (target host, request headers) were already checked for control bytes; and version 4.9.0 fully remediates by rejecting CR/LF/NUL values. Affected versions: hackney from 2.0.0 before 4.9.0. |
| Impact | Low real-world priority. The input CVSS 4.0 base score is 2.1 and the vuln.today decision label is 'monitor', not act_now or emergency. No EPSS score is provided, the CVE is not listed in CISA KEV, and no public exploit or PoC reference is present (only the fix PR/commit). All severity signals are therefore consistent and low. One conflict to verify: the supplied vector uses AV:L (local), yet the description states the malicious value is attacker-influenced via the proxy's 407 challenge headers, which is a network-sourced data path - AV:L reads as a config/operator-model choice rather than a true local-only trigger, so verify the attack-vector intent with the vendor/CNA. Exploitability is further gated by a non-default precondition (a proxy_auth_fun callback that derives its return value from untrusted data), making this a targeted, configuration-dependent integrity issue rather than a widespread threat. |
| Exploit ScenarioDerived | An Erlang/Elixir application uses hackney through an HTTP CONNECT proxy and configures a proxy_auth_fun that builds the Proxy-Authorization value from the proxy's 407 challenge headers. A malicious or man-in-the-middle proxy returns a challenge whose header values embed CR, LF or NUL bytes; on the CONNECT retry hackney writes that value unchecked, so the attacker-chosen bytes add extra header lines to the request sent to the proxy. No public exploit is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 26, 2026
HTTP request splitting in the Erlang hackney HTTP client (2.0.0 through 4.9.0) allows a caller-supplied proxy_auth_fun return value to inject additional header lines into the CONNECT request hackney sends to an HTTP proxy. The issue is only reachable in a non-default setup: hackney must be used over an HTTP CONNECT proxy, a proxy_auth_fun callback must be configured, the proxy must answer with a 407, and the callback must build its returned binary from untrusted data such as the proxy's challenge headers instead of static credentials, so an attacker must control or intercept the proxy response to influence the value. Impact is limited to request integrity against the proxy, no public exploit has been identified at time of analysis, and real-world priority is low; the vendor-released fix is 4.9.0.
RemediationAI
Upgrade hackney to 4.9.0, the vendor-released patch that rejects proxy_auth_fun values containing CR, LF or NUL with {error, {proxy_auth_error, invalid_header}} (fix in PR https://github.com/benoitc/hackney/pull/989, commit https://github.com/benoitc/hackney/commit/5ee7d7d19eba27e774667d472feb1e93a08af7f9, release https://github.com/benoitc/hackney/releases/tag/4.9.0). Where an immediate upgrade is not possible, the effective compensating control is to harden the callback itself: validate or strip CR, LF and NUL bytes from any value returned by proxy_auth_fun, or return only static credentials and never derive the value from the proxy's challenge headers; this depends on the application owner editing each callback correctly and can break legitimate authentication if the sanitization is too aggressive. When taking 4.9.0, review the other behaviour changes bundled in that release: a new max_body_size option now caps buffered response bodies at 512 MiB by default (raise it or set infinity for large downloads), redirects no longer resend basic_auth and cookie to a different port or over plain HTTP after HTTPS unless location_trusted is set, and HTTPS proxies reached via CONNECT now get normal CA bundle and hostname verification subject to proxy_ssl_options.
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 CWE-113, improper neutralization of CRLF sequences in HTTP headers, in the Erlang hackney HTTP client's CONNECT proxy authentication path. After an HTTP CONNECT proxy replies 407, hackney_http_connect:handle_proxy_auth/11 invokes the caller's proxy_auth_fun with the status code and response headers, then writes the returned binary verbatim into the Proxy-Authorization line of the CONNECT retry without validating it for control bytes. A CR, LF or NUL byte in that value terminates the header line early and appends attacker-chosen header lines to the request sent to the proxy. Other caller-supplied values on the same CONNECT path, namely the target host and the request headers, were already screened for control bytes, which makes this the only remaining unchecked injection point in that flow. The flaw is a request-splitting primitive against the proxy hop with limited integrity impact and no confidentiality or availability impact assessed; the trigger depends entirely on how the application implements its callback, and callbacks returning static credentials are not attacker-influenced. Version 4.9.0 addresses the defect by refusing such values with {error, {proxy_auth_error, invalid_header}}.
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:N/VI:L/VA:N/SC:N/SI:L/SA:N
Attacker-controlled proxy challenge data reaches an app-configured callback (AV:N) only under a non-default proxy_auth_fun deriving from untrusted input (AC:H); impact is request-splitting integrity only, so I:L and C/A:N.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Request/Response Splitting') vulnerability in hackney_http_connect in benoitc hackney allows HTTP Request Splitting via the value a proxy_auth_fun callback returns. After a 407 response from an HTTP CONNECT proxy, hackney_http_connect:handle_proxy_auth/11 calls the caller's proxy_auth_fun with the status code and the response headers and writes the returned binary into the Proxy-Authorization line of the CONNECT retry without checking it. A CR, LF or NUL byte in that value adds header lines to the request sent to the proxy.
The value is attacker-influenced when the callback derives it from untrusted data, for example from the proxy's challenge headers. Other caller-supplied values on the CONNECT path, such as the target host and the request headers, were already checked for control bytes.
This issue affects hackney: from 2.0.0 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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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
Server-side request forgery in the Erlang hackney HTTP client (versions 4.0.1 up to but not including 4.9.0) lets an att
EUVD-2026-109833
GHSA-5qp8-qrjx-2669
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB