Skip to main content

Guzzle CVE-2026-59883

| EUVDEUVD-2026-42320 MEDIUM
Origin Validation Error (CWE-346)
2026-07-08 GitHub_M GHSA-g446-98w2-8p5w
6.1
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Access
    Control or compromise numeric-domain endpoint
  2. Delivery
    Respond with crafted cross-host Set-Cookie header
  3. Exploit
    Victim application stores cookie in shared CookieJar
  4. Execution
    Application makes request to target numeric-domain host
  5. Persist
    CookieJar forwards injected cookie to target
  6. Impact
    Session fixation or authentication bypass achieved

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Origin validation
Exploitation Conditions

Exploitation requires three concurrent conditions: (1) the target PHP application must use Guzzle's CookieJar - either the default FileCookieJar, ArrayCookieJar, or SessionCookieJar - and must persist cookies across multiple HTTP requests within a session; (2) the application must make requests to at least two distinct hosts identified by numeric domain values - IPv4 literals (e.g., 192.168.0.1), IPv6 literals (e.g., [::1]), or bare numeric labels (e.g., 1) - within the same CookieJar scope; (3) the attacker must control or compromise the first numeric-domain endpoint in order to set the cross-scope cookie. Exploitation is limited by: the requirement for attacker control of a reachable numeric-addressed endpoint; the necessity that the application makes follow-up requests to a second numeric host in the same CookieJar session (UI:R); and the fact that applications communicating exclusively with FQDN-based hosts are entirely unaffected regardless of patch status.

Impact

The NVD CVSS 3.1 score of 4.7 (Medium) with vector AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N reflects the constrained exploitation conditions accurately. AC:H is the dominant risk-reducer: the attack requires the vulnerable application to reuse a single CookieJar across HTTP requests to multiple numerically addressed hosts, and the attacker must control or influence one of those hosts to plant the cross-scope cookie. S:C (Changed Scope) correctly captures that the impact extends beyond the system the attacker initially interacts with, affecting downstream hosts that receive injected cookies. EPSS data is not present in the available intelligence, but given the AC:H requirement and the niche deployment pattern needed, opportunistic mass exploitation is unlikely; targeted abuse against microservice architectures or IoT management backends that use Guzzle with IP-addressed endpoints is a more plausible threat model. This CVE is not listed in the CISA KEV catalog and no proof-of-concept has been identified, further supporting a low-to-moderate immediate operational priority for most organizations. The risk is highest for PHP applications that proxy or aggregate requests across multiple internal IP-based endpoints using a shared cookie context.

Exploit ScenarioDerived

An attacker operating a service at 10.0.0.2 - which the vulnerable PHP application contacts using Guzzle - responds with a Set-Cookie header scoped to domain '10.0.0.1'. Because matchesDomain() applies suffix matching to this numeric value, Guzzle's CookieJar stores the cookie and subsequently forwards it on requests to the legitimate backend at 10.0.0.1, achieving session fixation or injecting forged authentication state. No public proof-of-concept code has been identified at time of analysis, but the exploit logic is straightforward to construct from the advisory description.

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 – Jul 08, 2026

Cookie domain suffix-matching bypass in Guzzle PHP HTTP client (prior to 7.12.3) allows cross-host cookie disclosure, cookie injection, and session fixation when an application makes requests to multiple IP-address-based or bare-numeric-domain hosts within a shared CookieJar session. The SetCookie::matchesDomain() method incorrectly applied suffix-matching logic - valid for FQDN hierarchies - to numeric domain identifiers such as 192.168.0.1, [::1], and bare labels like 1, meaning a cookie set by one numeric host could be forwarded to a structurally related but distinct host. No public exploit has been identified at time of analysis; a vendor-released patch is available in version 7.12.3.

RemediationAI

Upgrade Guzzle to version 7.12.3 or later; this is a vendor-released patch confirmed at https://github.com/guzzle/guzzle/releases/tag/7.12.3. The underlying fix is implemented in commit b9944c161b12d9ee9c9334cfc5b9659ecd7451f8 (https://github.com/guzzle/guzzle/commit/b9944c161b12d9ee9c9334cfc5b9659ecd7451f8) and pull request https://github.com/guzzle/guzzle/pull/3694. For PHP applications using Composer, run 'composer require guzzlehttp/guzzle:^7.12.3'. If immediate upgrade is not feasible, a targeted compensating control is to instantiate a separate CookieJar per request or per target host rather than sharing a single instance across connections to different IP-addressed endpoints; this prevents cross-host cookie forwarding without requiring a library upgrade, though it may alter session-continuity behavior for multi-step flows. Applications that exclusively communicate with fully qualified domain name (FQDN) hosts and never use IP addresses or bare numeric labels as request targets are not affected by this specific code path.

Affected VersionsENISA

guzzle < 7.12.3

Affected Packages

composer guzzlehttp/guzzle fix: 7.12.3
euvd guzzle fix: 7.12.3

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 (CPE: cpe:2.3:a:guzzle:guzzle:*:*:*:*:*:*:*:*) is a widely adopted PHP HTTP client library used extensively in Laravel, Symfony, and other PHP ecosystems. The vulnerable component is CookieJar, specifically the SetCookie::matchesDomain() helper that determines whether a stored cookie should be forwarded to a given request host. For regular domain names, suffix matching (e.g., '.example.com' matching 'sub.example.com') is the correct and RFC-defined behavior. However, RFC 6265 explicitly requires that cookies scoped to IP addresses or numeric domain labels be matched only against the exact host that set them - suffix semantics do not apply. The root cause, CWE-346 (Origin Validation Error), manifests here because the library failed to discriminate between FQDN-style and numeric-style domain identifiers before applying matching logic, allowing a cookie from 192.168.0.100 to be considered a match for a request to 192.168.0.1 by virtue of sharing the trailing octet string.

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

Vendor (GitHub_M) PRIMARY MEDIUM
NVD 6.1 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 4.7 MEDIUM

Network-reachable via HTTP but AC:H for requiring attacker control of a numeric-domain endpoint and shared CookieJar across hosts; S:C because cookie injection crosses into a different host's security domain.

3.1 AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
Red Hat 4.7 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
CVSS changed
Jul 13, 2026 - 14:07 NVD
4.7 (MEDIUM) 6.1 (MEDIUM)
Patch available
Jul 08, 2026 - 18:02 EUVD

DescriptionNVD

Guzzle is an extensible PHP HTTP client. Prior to 7.12.3, CookieJar did not restrict cookies scoped to IP-address or bare-numeric Domain values to the exact host that set them, because SetCookie::matchesDomain() applied ordinary suffix matching to domains such as 192.168.0.1, [::1], or 1, allowing cross-host cookie disclosure, cookie injection, or session fixation. This issue is fixed in version 7.12.3.

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
High
dominant PHP HTTP client, ubiquitous across Laravel and Symfony ecosystems
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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 Yes
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
High
Technical Impact
Partial

Priority Score

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

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

More in Guzzle

View all
CVE-2026-69246 HIGH POC
7.2 Aug 03

Host confusion in GuzzleHttp Guzzle before 7.15.2 and 8.0.1 allows remote attackers who can influence a fetched URI to b

CVE-2026-69245 MEDIUM POC
6.5 Aug 03

Cookie domain scope bypass in Guzzle PHP HTTP client (prior to 7.15.2 and 8.0.1) allows improper cookie sharing via non-

CVE-2026-67354 HIGH
8.2 Aug 01

URI fragment leakage in guzzlehttp/guzzle's RedirectMiddleware (versions before 7.15.1) exposes sensitive client-side da

CVE-2026-67355 HIGH
8.2 Aug 01

Cookie scope leakage in guzzlehttp/guzzle before 7.15.1 allows an attacker controlling a child subdomain to receive host

CVE-2022-29248 HIGH
8.1 May 25

Guzzle is a PHP HTTP client. Rated high severity (CVSS 8.1), this vulnerability is remotely exploitable, no authenticati

CVE-2022-31091 HIGH
7.7 Jun 27

Guzzle, an extensible PHP HTTP client. Rated high severity (CVSS 7.7), this vulnerability is remotely exploitable, low a

CVE-2022-31090 HIGH
7.7 Jun 27

Guzzle, an extensible PHP HTTP client. Rated high severity (CVSS 7.7), this vulnerability is remotely exploitable, low a

CVE-2022-31043 HIGH
7.5 Jun 10

Guzzle is an open source PHP HTTP client. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no

CVE-2022-31042 HIGH
7.5 Jun 10

Guzzle is an open source PHP HTTP client. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no

CVE-2026-67353 MEDIUM
6.9 Aug 01

Denial of service in guzzlehttp/guzzle versions before 7.15.1 allows a malicious or compromised upstream server to exhau

CVE-2026-67339 MEDIUM
6.9 Aug 01

Proxy-Authorization header leakage in guzzlehttp/guzzle before 7.14.2 allows origin servers to receive proxy credentials

CVE-2026-59882 MEDIUM
6.5 Jul 08

Host validation bypass in guzzlehttp/psr7 before 2.12.3 enables URI authority confusion attacks against PHP applications

Vendor StatusVendor

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