Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOperate or compromise target origin server
-
DeliveryObserve victim application send request with Proxy-Authorization via SOCKS or no_proxy route
-
ExploitCapture leaked credential from origin server access logs
-
ExecutionAuthenticate to victim's proxy using stolen credential
-
ImpactPivot through proxy to restricted destinations
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires two co-present conditions: (1) the Guzzle application must set a Proxy-Authorization header as a first-class PSR-7 header (via client 'headers' defaults, the 'headers' request option, or middleware - not through raw CURLOPT_HTTPHEADER/CURLOPT_PROXYHEADER), and (2) at least one of the following routing conditions must apply to that request: the request is sent directly (proxy option set to empty string or absent), the proxy is bypassed because the target matches a no_proxy/NO_PROXY environment variable rule, the configured proxy is a SOCKS proxy (SOCKS4/SOCKS5 do not use the HTTP proxy header channel, so Guzzle never migrates the header), or the request follows a redirect from a proxied hop into any of the above direct routes. On hosts running libcurl older than 7.37.0 or PHP cURL builds lacking CURLOPT_PROXYHEADER/CURLHEADER_SEPARATE support, the header leaks unconditionally on all routes regardless of proxy type. Exploitation is further limited to scenarios where the attacker controls or can observe the origin server receiving the misdirected request (e.g., via access logs, tracing systems, or application logs). No authentication or privilege is required from the attacker's side - the leak is triggered entirely by the victim application's routing behavior. |
| Impact | The CVSS 4.0 base score of 6.9 with vector AV:N/AC:L/AT:N/PR:N/UI:N/VC:L reflects a network-reachable, low-complexity information disclosure - consistent with a credential leakage class finding. However, the official vector's AC:L and AT:N require scrutiny: successful exploitation depends on specific application-side conditions (SOCKS proxy usage, no_proxy bypass, direct-connection mode, or cross-proxy redirects) that are not universally present in default Guzzle deployments. A more conservative independent assessment would raise AC or AT, reducing the score slightly. No EPSS score was provided in the input data and cannot be inferred. KEV status is absent - no confirmed active exploitation. No public proof-of-concept code has been reported. Despite these limiting signals, the real-world risk is meaningful for applications that use Proxy-Authorization credentials over proxied HTTP clients in multi-tier or cloud-egress architectures: the credential leakage is silent, requires no attacker interaction with the victim system, and could provide persistent proxy access. The SSVC exploitation dimension is 'none' based on available data, but technical impact is partial (credential theft enabling secondary abuse). The combination of no KEV, no POC, and condition-dependent triggering suggests this is a genuine but targeted-exposure risk rather than an immediately mass-exploitable critical. |
| Exploit ScenarioDerived | An attacker operates or compromises a web server that serves as an origin endpoint for a PHP application using Guzzle with Proxy-Authorization credentials configured. When the application sends a request that Guzzle routes through a SOCKS proxy - or one that matches a no_proxy rule causing a direct connection - the Proxy-Authorization header appears in the HTTP request received by the attacker's origin server and is recorded in its access log. The attacker then reuses the captured credential to connect through the victim's proxy infrastructure, gaining access to internal or paid-gateway resources the proxy is trusted to reach. No public exploit code has been identified at time of analysis, but the exploitation path requires only standard HTTP server log access. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 01, 2026
Proxy-Authorization header leakage in guzzlehttp/guzzle before 7.14.2 allows origin servers to receive proxy credentials due to a cURL handler misclassification bug. When requests are routed via SOCKS proxies, match no_proxy bypass rules, connect directly with proxying disabled, or cross proxy boundaries during redirects, Guzzle fails to migrate the Proxy-Authorization header from cURL's origin header list to the proxy-only channel - the credential arrives at the origin server instead of being confined to the proxy hop. An attacker who controls or monitors a destination origin server can harvest these credentials from access logs, then abuse the proxy to impersonate the proxy principal or reach destinations gated behind that proxy. No public exploit code has been identified at time of analysis.
RemediationAI
Upgrade guzzlehttp/guzzle to version 7.14.2 or later via Composer: run 'composer require guzzlehttp/guzzle:^7.14.2'. This is the vendor-confirmed fixed release as documented in the GitHub security advisory GHSA-94pj-82f3-465w and the upstream commit at https://github.com/guzzle/guzzle/commit/9e4580d4b9981e903dc6323fe37f50a96e85b05e (PR #3876). If immediate upgrade is blocked, three compensating controls can reduce exposure: first, avoid passing Proxy-Authorization as a first-class PSR-7 request header - instead supply proxy credentials exclusively through cURL's raw CURLOPT_PROXYUSERPWD option, bypassing the affected code path entirely (trade-off: requires lower-level cURL configuration and cannot be set via Guzzle's standard header API); second, disable redirect following (RequestOptions::ALLOW_REDIRECTS => false) where Proxy-Authorization is in use, which eliminates the cross-origin redirect disclosure vector (trade-off: breaks any workflow relying on HTTP redirects); third, rotate any Proxy-Authorization credentials that may have been exposed to origin servers, particularly if access logs on destination servers are accessible to third parties. Detailed guidance is available at https://github.com/guzzle/guzzle/security/advisories/GHSA-94pj-82f3-465w.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Guzzle's CurlHandler and CurlMultiHandler (the default HTTP transport when PHP's cURL extension is installed) build the outgoing request by placing all first-class PSR-7 headers into cURL's CURLOPT_HTTPHEADER option - the origin header list. The library's intended design moves Proxy-Authorization to cURL's CURLOPT_PROXYHEADER option (the proxy-only channel) only when Guzzle's own routing logic predicts an HTTP or HTTPS proxy will be used. This prediction diverges from the route libcurl actually takes in four cases: direct connections, no_proxy/NO_PROXY rule matches, SOCKS proxies (which do not use the HTTP proxy header channel at all), and cross-origin redirects where redirect middleware re-evaluates the proxy per hop but - unlike Authorization and Cookie - does not strip Proxy-Authorization. On installations where libcurl is older than 7.37.0 or the PHP cURL extension lacks CURLOPT_PROXYHEADER and CURLHEADER_SEPARATE support, no proxy-only channel is available and the credential leaks on every route. The stream handler serialized first-class headers before proxy selection, introducing a parallel disclosure path. CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor) accurately captures the root cause: the credential, scoped by RFC 9110 to the next inbound proxy only, is transmitted to an unintended recipient. CPE cpe:2.3:a:guzzle:guzzle:*:*:*:*:*:*:*:* covers all Guzzle releases; the fix is in composer package guzzlehttp/guzzle 7.14.2.
Know when Guzzle 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:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
AC:H because triggering the leak requires non-default routing conditions (SOCKS proxy, no_proxy match, or redirect across proxy boundary); C:L for proxy credential disclosure only.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
guzzlehttp/guzzle versions before 7.14.2 fail to properly isolate Proxy-Authorization headers from origin servers in cURL handlers. Attackers can capture proxy credentials through origin server access logs when requests are redirected, bypassed, or sent through SOCKS proxies that Guzzle misclassifies as direct connections.
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.
Host confusion in GuzzleHttp Guzzle before 7.15.2 and 8.0.1 allows remote attackers who can influence a fetched URI to b
Cookie domain scope bypass in Guzzle PHP HTTP client (prior to 7.15.2 and 8.0.1) allows improper cookie sharing via non-
URI fragment leakage in guzzlehttp/guzzle's RedirectMiddleware (versions before 7.15.1) exposes sensitive client-side da
Cookie scope leakage in guzzlehttp/guzzle before 7.15.1 allows an attacker controlling a child subdomain to receive host
Guzzle is a PHP HTTP client. Rated high severity (CVSS 8.1), this vulnerability is remotely exploitable, no authenticati
Guzzle, an extensible PHP HTTP client. Rated high severity (CVSS 7.7), this vulnerability is remotely exploitable, low a
Guzzle, an extensible PHP HTTP client. Rated high severity (CVSS 7.7), this vulnerability is remotely exploitable, low a
Guzzle is an open source PHP HTTP client. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no
Guzzle is an open source PHP HTTP client. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no
Denial of service in guzzlehttp/guzzle versions before 7.15.1 allows a malicious or compromised upstream server to exhau
Host validation bypass in guzzlehttp/psr7 before 2.12.3 enables URI authority confusion attacks against PHP applications
Cookie domain suffix-matching bypass in Guzzle PHP HTTP client (prior to 7.12.3) allows cross-host cookie disclosure, co
EUVD-2026-51854
GHSA-32rq-jhr7-m3hh
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB