guzzlehttp/guzzle security advisory
CVE-2026-59883: Guzzle: Cookie Disclosure and Injection via IP-Address Domains
CVE-2026-59883 is a medium-severity session fixation vulnerability in the PHP package guzzlehttp/guzzle (CVSS 6.1), published 8 July 2026. It is fixed in 7.12.3; earlier versions are affected. It can be exploited without an account.
medium 6.1 published 2026-07-08 · updated 2026-07-13
- Affected versions
- < 7.12.3
- Fixed in
- 7.12.3
- Newest release
- 8.3.1
- Severity
- Medium · CVSS 6.1
- Type
- Session fixation
CWE-346, CWE-384 - Exploited in the wild
- Not on the CISA KEV list
checked 2026-11-04
Is your guzzlehttp/guzzle version affected?
Who can exploit CVE-2026-59883
- Access: No account. Anyone who can send a request to an app that uses the affected code.
- Interaction: A user also has to do something, such as open a link or a page the attacker prepared.
CVSS vector (scored by NVD): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
How to fix CVE-2026-59883 in guzzlehttp/guzzle
- Find the installed version:
composer show guzzlehttp/guzzle. If you never required it yourself,composer why guzzlehttp/guzzleshows which package pulls it in. - Update it:
composer update guzzlehttp/guzzle --with-all-dependencies. You need 7.12.3 or newer. - If Composer will not go that high, your composer.json constraint is holding it back. Widen it (for example
"guzzlehttp/guzzle": "^7.12.3"if you can take that version), or upgrade the package that requires it. - Run
composer audit. It reads the same advisory data and should no longer list CVE-2026-59883. - Commit composer.lock and deploy it. On the server, run
composer install --no-devfrom the lock file, notcomposer update.
If you cannot upgrade yet
- Regenerate the session id at login and logout.
- If your app does not use the affected feature, note that in your audit, but still plan the upgrade.
The CVE-2026-59883 advisory
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.
References
- GitHub advisory GHSA-g446-98w2-8p5w github.com
- Fix commit b9944c1 github.com
- Pull request #3694 github.com
- Release 7.12.3 github.com
Other guzzlehttp/guzzle advisories
- high CVE-2026-69246: Guzzle: Noncanonical host can bypass host-based checks 2026-08-03
- medium CVE-2026-69245: Guzzle: Noncanonical cookie domain keeps subdomain scope 2026-08-03
- medium CVE-2026-67354: Guzzle: URI fragments disclosed in redirect Referer headers 2026-07-20
- medium CVE-2026-67355: Guzzle: Host-only cookie scope is not preserved 2026-07-20
- medium CVE-2026-67353: Guzzle: Unbounded response cookies risk denial of service 2026-07-20
- medium CVE-2026-67339: Guzzle: Proxy-Authorization headers can be sent to origin servers 2026-07-20
Related
Need help patching or upgrading? Laskyr does PHP and Laravel security fixes and upgrades. Tell us what you run and we reply with a plan and a price.
Ask about a fixWhere this data comes from
- Affected and fixed versions: the Packagist security advisories API (GitHub Advisory Database and FriendsOfPHP), the same data
composer audituses. Synced 2026-11-03. - Description, score, weakness and references: NIST National Vulnerability Database (NVD), checked 2026-11-04. This product uses data from the NVD API but is not endorsed or certified by the NVD.
- Exploited-in-the-wild status: the CISA Known Exploited Vulnerabilities catalog, checked 2026-11-04.
- Compiled by Daniel Lasek at Laskyr from the sources above. The summary, “who can exploit it”, “how to fix it” and hardening sections are our plain-English reading of the record and are generated from it. The quoted description is the record's own text. Spot an error? Tell us.