Skip to main content

Guzzle HTTP Client EUVDEUVD-2026-38456

| CVE-2026-55568 MEDIUM
Missing Encryption of Sensitive Data (CWE-311)
2026-06-19 https://github.com/guzzle/guzzle GHSA-wpwq-4j6v-78m3
5.9
CVSS 3.1 · Vendor: https://github.com/guzzle/guzzle
View

Attack ChainAIDerived

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

  1. Access
    Identify target running Guzzle with https:// proxy
  2. Delivery
    Confirm libcurl < 7.50.2 on target host
  3. Exploit
    Gain network position between app and proxy
  4. Execution
    Observe cleartext proxy TCP connection
  5. Persist
    Capture Proxy-Authorization credentials and CONNECT tunnel metadata
  6. Impact
    Leverage credentials for proxy abuse or lateral movement

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V14 - Data Protection Encryption of sensitive data
Exploitation Conditions

Three conditions must all be true simultaneously. First, the application must invoke Guzzle's built-in CurlHandler or CurlMultiHandler (the default whenever the PHP cURL extension is loaded - not the stream handler). Second, an https:// proxy must be configured, whether through the Guzzle proxy request option, a client-level proxy default, or any of the environment variables http_proxy, https_proxy, HTTPS_PROXY, all_proxy, or ALL_PROXY. Third, the system libcurl must be version 7.50.2 or older (libcurl 7.50.2 was released August 2016). Applications that do not configure an https:// proxy are entirely unaffected regardless of libcurl version. Deployments on libcurl 7.50.2 through 7.51.x or libcurl 7.52.0 without HTTPS-proxy compile-time support fail at connect rather than silently downgrading, which limits but does not eliminate exposure under the older Guzzle versions. Low-level CURLOPT_PROXY or CURLOPT_PROXYTYPE settings bypass Guzzle's first-class proxy handling and remain the caller's responsibility.

Impact

The vendor-supplied CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N, score 5.9) accurately characterises the risk: the attack is network-reachable (AV:N) but carries High Complexity (AC:H) because exploitation depends on three concurrent conditions - the application must use Guzzle's cURL handlers with an https:// proxy configured, the system libcurl must pre-date 7.50.2 (released August 2016), and an attacker must hold a network position between the application server and the proxy. Confidentiality impact is High because proxy credentials and tunnel metadata are fully exposed in cleartext. There is no integrity or availability impact. No EPSS score is available in the provided data, and the absence of KEV listing and public POC code limits urgency for most deployments. In practice, libcurl < 7.50.2 is approximately a decade old; modern Linux distributions ship libcurl 7.68 or newer. The realistic risk is concentrated in containerised or embedded environments that pin very old libcurl builds, or deployments running long-unmaintained base images.

Exploit ScenarioDerived

An attacker with a man-in-the-middle position on the network segment between an application server and its configured HTTPS proxy - for example, within the same data-centre VLAN or via ARP poisoning - intercepts the cleartext TCP connection that Guzzle's CurlHandler silently establishes instead of TLS. The attacker reads the Proxy-Authorization header containing proxy credentials in plaintext and, for tunneled HTTPS requests, observes the CONNECT target hostname and port. No public POC exists for this scenario, but the attack is conceptually straightforward for any network-adjacent adversary.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jun 19, 2026

Silent TLS downgrade in Guzzle's built-in cURL handlers exposes proxy credentials and tunneled connection metadata to network interception when the application is configured to use an https:// proxy but runs against libcurl older than 7.50.2. Affected deployments see proxy authentication headers (Proxy-Authorization, CURLOPT_PROXYUSERPWD), CONNECT target host/port for tunneled HTTPS, and full request headers and bodies for plain HTTP requests transmitted without encryption - with no runtime error or warning from Guzzle or libcurl. No public exploit identified at time of analysis and no CISA KEV listing; however, the CVSS confidentiality impact is rated High (C:H) due to full credential exposure on the proxy leg.

RemediationAI

The primary fix is upgrading to guzzlehttp/guzzle 7.12.1 or later via Composer (composer require guzzlehttp/guzzle:^7.12.1). Starting in that release, the cURL handlers detect libcurl capability at request time by checking both the version (>= 7.52.0) and the CURL_VERSION_HTTPS_PROXY feature bit; if the proxy cannot be used securely, a GuzzleHttp\Exception\RequestException is thrown before any bytes reach the network. For teams that cannot upgrade immediately, the vendor-documented workaround is to add an explicit capability check before configuring an https:// proxy - verifying that libcurl version_compare >= '7.52.0' AND that the CURL_VERSION_HTTPS_PROXY bit is set in curl_version()['features'] - and throw an application-level exception if the check fails. Additionally, auditing and removing https:// proxy configuration from deployments where libcurl is confirmed below 7.50.2 eliminates exposure entirely. Upgrading the system libcurl to 7.52.0 or newer built with HTTPS-proxy support also resolves the underlying downgrade behaviour independently of the Guzzle version. Advisory reference: https://github.com/guzzle/guzzle/security/advisories/GHSA-wpwq-4j6v-78m3.

Affected VersionsENISA

guzzle < 7.12.1

Affected Packages

composer guzzlehttp/guzzle fix: 7.12.1
euvd guzzle fix: 7.12.1

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 (guzzlehttp/guzzle, pkg:composer/guzzlehttp_guzzle) is a widely-used PHP HTTP client that delegates actual transport to PHP's cURL extension, backed by the system libcurl shared library. HTTPS-proxy support - meaning a proxy connection itself protected by TLS - was added to libcurl in version 7.52.0 (December 2016) and is gated behind the CURL_VERSION_HTTPS_PROXY feature bit. Versions older than 7.50.2 silently accept an https:// proxy URL but connect to it in plaintext; the library never establishes TLS to the proxy and issues no diagnostic. CWE-311 (Missing Encryption of Sensitive Data) captures the root cause: Guzzle's CurlHandler and CurlMultiHandler previously passed the proxy URL to libcurl without first checking whether the installed build actually supports the encrypted proxy scheme, leaving the enforcement gap entirely undetected by the application.

Know when PHP 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 (https://github.com/guzzle/guzzle) PRIMARY 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 5.9 MEDIUM

Network-reachable attack path (AV:N) but AC:H because exploitation requires concurrent libcurl < 7.50.2, https:// proxy configuration, and attacker network position; proxy credentials fully exposed so C:H.

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

Primary rating from Vendor (https://github.com/guzzle/guzzle).

CVSS VectorVendor: https://github.com/guzzle/guzzle

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

DescriptionCVE.org

Impact

The built-in cURL handlers (GuzzleHttp\Handler\CurlHandler and GuzzleHttp\Handler\CurlMultiHandler, used by default whenever the PHP cURL extension is available) accept an https:// proxy - a proxy reached over a TLS-encrypted connection - through the proxy request option, client-level proxy defaults, or proxy environment variables such as http_proxy, https_proxy, HTTPS_PROXY, all_proxy, and ALL_PROXY.

When the installed libcurl does not support HTTPS proxies, behavior depends on the libcurl version/build:

  • libcurl older than 7.50.2 silently treats an https:// proxy as a plaintext http:// proxy. The TLS connection to the proxy is never established, and the proxy leg is cleartext with no error or warning.
  • libcurl 7.50.2 through 7.51.x rejects the unsupported proxy scheme at connect time, so no cleartext exposure occurs, but the failure is late and opaque.
  • libcurl 7.52.0 or newer builds without HTTPS-proxy support also fail at connect time rather than downgrading.

The security-relevant case is the silent downgrade on libcurl older than 7.50.2. An application is affected when it sends requests through one of the built-in cURL handlers, configures an https:// proxy expecting the proxy connection itself to be encrypted, and runs with libcurl older than 7.50.2.

In that configuration, traffic expected to be protected by TLS on the hop to the proxy is transmitted in cleartext. Proxy authentication credentials (the Proxy-Authorization header, proxy userinfo in the proxy URL, or CURLOPT_PROXYUSERPWD) are sent without encryption, and the CONNECT target host and port for tunneled HTTPS requests are exposed. For plain HTTP requests, request headers and bodies are also exposed on the proxy leg. End-to-end HTTPS requests tunneled through the proxy remain protected by their inner TLS session; the exposure is limited to the proxy negotiation and proxy credentials.

Applications that do not configure an https:// proxy are not affected. Installations running libcurl 7.52.0 or newer built with HTTPS-proxy support are not affected because HTTPS proxies work as intended. Installations running libcurl 7.50.2 through 7.51.x, or libcurl 7.52.0 or newer built without HTTPS-proxy support, are not exposed to the silent cleartext downgrade, but Guzzle now rejects those unsupported configurations up front as well. The built-in stream handler is not affected; the issue is specific to the cURL handlers' proxy handling. Low-level cURL options under the curl request option, such as CURLOPT_PROXY or CURLOPT_PROXYTYPE, are advanced custom configuration and remain the caller's responsibility.

Patches

The issue is patched in 7.12.1 and later. Starting in that release, the built-in cURL handlers detect whether the installed libcurl supports HTTPS proxies - requiring both libcurl 7.52.0 or newer and the CURL_VERSION_HTTPS_PROXY feature bit - and reject a request configured through Guzzle's first-class proxy handling with an https:// proxy up front by throwing a GuzzleHttp\Exception\RequestException. No request bytes reach the network when the proxy cannot be used securely. Versions before 7.12.1 are affected by the silent downgrade when run against libcurl older than 7.50.2.

Workarounds

If you cannot upgrade immediately, do not configure an https:// proxy on an installation whose libcurl lacks HTTPS-proxy support, and verify the capability in application code before using one. Remember to check proxy environment variables as well as any explicit proxy option:

php
$curl = \curl_version();
$httpsProxyBit = \defined('CURL_VERSION_HTTPS_PROXY') ? \CURL_VERSION_HTTPS_PROXY : (1 << 21);

if (\version_compare($curl['version'], '7.52.0', '<') || 0 === ($curl['features'] & $httpsProxyBit)) {
    throw new \RuntimeException('Installed libcurl does not support HTTPS proxies.');
}

Upgrading the system libcurl to 7.52.0 or newer built with HTTPS-proxy support also resolves the underlying unsupported-proxy behavior.

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

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