Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl or compromise numeric-domain endpoint
-
DeliveryRespond with crafted cross-host Set-Cookie header
-
ExploitVictim application stores cookie in shared CookieJar
-
ExecutionApplication makes request to target numeric-domain host
-
PersistCookieJar forwards injected cookie to target
-
ImpactSession 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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 (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
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorNVD
Lifecycle Timeline
2DescriptionNVD
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
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
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
Proxy-Authorization header leakage in guzzlehttp/guzzle before 7.14.2 allows origin servers to receive proxy credentials
Host validation bypass in guzzlehttp/psr7 before 2.12.3 enables URI authority confusion attacks against PHP applications
EUVD-2026-42320
GHSA-g446-98w2-8p5w
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB