CVE-2026-67354
guzzlehttp/guzzle before 7.15.1 URI Fragment Disclosure via Referer
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
8.2
guzzlehttp/guzzle before 7.15.1 URI Fragment Disclosure via Referer
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
CVE-2026-67354- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-201
- Updated
- 2026-11-02
EUVDEUVD-2026-51825
8.2
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
EUVD-2026-51825- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-h95v-h523-3mw8
5.9
Guzzle: URI fragments disclosed in redirect Referer headers
Impact
When the optional referer redirect setting is enabled, affected versions of RedirectMiddleware can copy the fragment from the referring request URI into a generated Referer header. A URI fragment is the part after #. It is handled locally by the client and is not part of the HTTP request target, so the server handling the original request does not receive it. A generated Referer tells the redirect destination which URI led to the request. Guzzle correctly removes user information from that value, but retains the fragment when it follows a redirect to the same scheme, such as HTTPS to HTTPS. For example, an initial URI ending in #secret is sent without the fragment, but the redirect destination can receive a Referer ending in #secret. This behavior affects both the cURL and stream handlers.
An attacker who controls the redirect destination can read the fragment from the incoming header, including through request logs or application code. If the fragment contains a one-time login secret, access token, state value, or other private client data, it is disclosed to a server that was never meant to receive it. Exploitation requires the application to enable allow_redirects.referer, make a request to a URI with a sensitive fragment, and follow a same-scheme redirect to a less-trusted destination.
The referer setting is disabled by default. Applications that leave it disabled, do not put sensitive data in URI fragments, do not follow redirects, or only redirect within the same trust boundary are not affected. Guzzle already omits the generated header when the scheme changes. This issue is limited to the fragment's inclusion. Reducing the path and query on cross-origin redirects is a separate privacy policy question.
Patches
The issue is patched in 7.15.1 and later. Starting in that release, Guzzle removes both user information and the fragment before generating a redirect Referer value. Other redirect behavior does not change. Guzzle retains the referring path and query, and continues to omit the header when the scheme changes. Versions before 7.15.1 are affected when the optional referer setting is enabled.
Workarounds
If you cannot upgrade immediately, leave automatic Referer generation disabled. It is off by default. If redirect options are configured explicitly, ensure that referer is false:
$client->request('GET', $uri, [
'allow_redirects' => ['referer' => false],
]);
Alternatively, disable automatic redirects and follow trusted destinations manually, or remove the fragment from the request URI before sending a request that may redirect. Do not rely on the fact that fragments are absent from the initial HTTP request target, because the affected middleware can reintroduce them in the generated header.
References
- Record
GHSA-h95v-h523-3mw8- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-201, CWE-212
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-mqq9-gxg5-m58g
8.2
Duplicate Advisory: Guzzle: URI fragments disclosed in redirect Referer headers
Duplicate Advisory
This advisory has been withdrawn because it is a duplicate of GHSA-h95v-h523-3mw8. This link is maintained to preserve external references.
Original Description
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
GHSA-mqq9-gxg5-m58g- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-201
- Updated
- 2026-11-02
NVD
8.2
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
CVE-2026-67354- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-201
- Updated
- 2026-11-02
OSV
8.2
guzzlehttp/guzzle before 7.15.1 URI Fragment Disclosure via Referer
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
CVE-2026-67354- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-201
- Updated
- 2026-11-02
Show 9 moreShow less
OSVDEBIAN-CVE-2026-67354
8.2
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
DEBIAN-CVE-2026-67354- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-02
OSVGHSA-h95v-h523-3mw8
5.9
Guzzle: URI fragments disclosed in redirect Referer headers
Impact
When the optional referer redirect setting is enabled, affected versions of RedirectMiddleware can copy the fragment from the referring request URI into a generated Referer header. A URI fragment is the part after #. It is handled locally by the client and is not part of the HTTP request target, so the server handling the original request does not receive it. A generated Referer tells the redirect destination which URI led to the request. Guzzle correctly removes user information from that value, but retains the fragment when it follows a redirect to the same scheme, such as HTTPS to HTTPS. For example, an initial URI ending in #secret is sent without the fragment, but the redirect destination can receive a Referer ending in #secret. This behavior affects both the cURL and stream handlers.
An attacker who controls the redirect destination can read the fragment from the incoming header, including through request logs or application code. If the fragment contains a one-time login secret, access token, state value, or other private client data, it is disclosed to a server that was never meant to receive it. Exploitation requires the application to enable allow_redirects.referer, make a request to a URI with a sensitive fragment, and follow a same-scheme redirect to a less-trusted destination.
The referer setting is disabled by default. Applications that leave it disabled, do not put sensitive data in URI fragments, do not follow redirects, or only redirect within the same trust boundary are not affected. Guzzle already omits the generated header when the scheme changes. This issue is limited to the fragment's inclusion. Reducing the path and query on cross-origin redirects is a separate privacy policy question.
Patches
The issue is patched in 7.15.1 and later. Starting in that release, Guzzle removes both user information and the fragment before generating a redirect Referer value. Other redirect behavior does not change. Guzzle retains the referring path and query, and continues to omit the header when the scheme changes. Versions before 7.15.1 are affected when the optional referer setting is enabled.
Workarounds
If you cannot upgrade immediately, leave automatic Referer generation disabled. It is off by default. If redirect options are configured explicitly, ensure that referer is false:
$client->request('GET', $uri, [
'allow_redirects' => ['referer' => false],
]);
Alternatively, disable automatic redirects and follow trusted destinations manually, or remove the fragment from the request URI before sending a request that may redirect. Do not rely on the fact that fragments are absent from the initial HTTP request target, because the affected middleware can reintroduce them in the generated header.
References
- Record
GHSA-h95v-h523-3mw8- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-201, CWE-212
- Updated
- 2026-11-02
OSVGHSA-mqq9-gxg5-m58g
8.2
Duplicate Advisory: Guzzle: URI fragments disclosed in redirect Referer headers
Duplicate Advisory
This advisory has been withdrawn because it is a duplicate of GHSA-h95v-h523-3mw8. This link is maintained to preserve external references.
Original Description
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
GHSA-mqq9-gxg5-m58g- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Weakness
- CWE-201
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-67354
8.2
guzzlehttp/guzzle versions before 7.15.1 contain an information disclosure vulnerability in RedirectMiddleware. When the optional allow_redirects.referer setting is enabled, the middleware copies the URI fragment (the portion after '#') from the referring request into the generated Referer header when following a same-scheme redirect (e.g., HTTPS to HTTPS). An attacker who controls the redirect destination can read this fragment from the incoming Referer header, potentially disclosing one-time login secrets, access tokens, state values, or other sensitive client data to a server never meant to receive it. The referer setting is disabled by default. Fixed in 7.15.1, which strips the fragment before generating the Referer value.
- Record
UBUNTU-CVE-2026-67354- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N - Updated
- 2026-11-02
OSVCLSA-2026-1784856237 No score
TuxCare security update for guzzlehttp/guzzle (9 CVEs)
TuxCare rebuilt guzzlehttp/guzzle to address 9 CVEs. Fixed in 7.10.0-p2+tuxcare.
- Record
CLSA-2026-1784856237- Updated
- 2026-11-02
OSVCLSA-2026-1785380882 No score
TuxCare security update for guzzlehttp/guzzle (8 CVEs)
TuxCare rebuilt guzzlehttp/guzzle to address 8 CVEs. Fixed in 6.5.8-p2+tuxcare.
- Record
CLSA-2026-1785380882- Updated
- 2026-11-02
OSVCLSA-2026-1786439704 No score
TuxCare security update for guzzlehttp/guzzle (6 CVEs)
TuxCare rebuilt guzzlehttp/guzzle to address 6 CVEs. Fixed in 6.3.3-p2+tuxcare.
- Record
CLSA-2026-1786439704- Updated
- 2026-11-02
OSVCLSA-2026-1788269522 No score
TuxCare security update for guzzlehttp/guzzle (7 CVEs)
TuxCare rebuilt guzzlehttp/guzzle to address 7 CVEs. Fixed in 6.3.3-p3+tuxcare.
- Record
CLSA-2026-1788269522- Updated
- 2026-11-02
OSVCLSA-2026-1788433786 No score
TuxCare security update for guzzlehttp/guzzle (11 CVEs)
TuxCare rebuilt guzzlehttp/guzzle to address 11 CVEs. Fixed in 6.0.2-p5+tuxcare.
- Record
CLSA-2026-1788433786- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
guzzlehttp/guzzlePackagist |
before 7.15.1 | 7.15.1 |
guzzlehttp/guzzleTuxCare:Packagist From an advisory covering 5 CVEs |
7.10.0 up to 7.10.0-p2+tuxcare, plus listed versions 7.10.0-p1+tuxcare |
7.10.0-p2+tuxcare |
guzzlehttp/guzzleTuxCare:Packagist From an advisory covering 5 CVEs |
6.5.8 up to 6.5.8-p2+tuxcare, plus listed versions 6.5.8-p1+tuxcare |
6.5.8-p2+tuxcare |
guzzlehttp/guzzleTuxCare:Packagist From an advisory covering 3 CVEs |
6.3.3 up to 6.3.3-p2+tuxcare, plus listed versions 6.3.3-p1+tuxcare |
6.3.3-p2+tuxcare |
guzzlehttp/guzzleTuxCare:Packagist From an advisory covering 6 CVEs |
6.3.3 up to 6.3.3-p3+tuxcare, plus listed versions 6.3.3-p1+tuxcare6.3.3-p2+tuxcare |
6.3.3-p3+tuxcare |
guzzlehttp/guzzleTuxCare:Packagist From an advisory covering 7 CVEs |
6.0.2 up to 6.0.2-p5+tuxcare, plus listed versions 6.0.2-p1+tuxcare6.0.2-p2+tuxcare6.0.2-p3+tuxcare6.0.2-p4+tuxcare |
6.0.2-p5+tuxcare |
guzzleDebian:12 |
All versions, plus listed versions 7.11.0-17.12.0-17.12.1-17.12.3-17.13.1-1 Show 14 moreShow less7.14.0-17.14.1-17.14.2-17.15.0-17.15.1-17.15.2-17.15.3-17.15.5-17.4.5-17.9.2-0.18.0.1-18.0.2-18.1.0-18.2.0-1 |
None known |
guzzleDebian:13 |
All versions, plus listed versions 7.11.0-17.12.0-17.12.1-17.12.3-17.13.1-1 Show 13 moreShow less7.14.0-17.14.1-17.14.2-17.15.0-17.15.1-17.15.2-17.15.3-17.15.5-17.9.2-0.18.0.1-18.0.2-18.1.0-18.2.0-1 |
None known |
guzzleDebian:14 |
before 7.15.1-1, plus listed versions 7.11.0-17.12.0-17.12.1-17.12.3-17.13.1-1 Show 5 moreShow less7.14.0-17.14.1-17.14.2-17.15.0-17.9.2-0.1 |
7.15.1-1 |
guzzlehttp/guzzlePackagist |
before 7.15.1, plus listed versions 4.0.04.0.0-rc.14.0.0-rc.24.0.14.0.2 Show 45 moreShow less4.1.04.1.14.1.24.1.34.1.44.1.54.1.64.1.74.1.84.2.04.2.14.2.24.2.34.2.45.0.05.0.15.0.25.0.35.1.05.2.05.3.05.3.15.3.25.3.35.3.46.0.06.0.16.0.26.1.06.1.16.2.06.2.16.2.26.2.36.3.06.3.16.3.26.3.36.4.06.4.16.5.06.5.16.5.26.5.36.5.4 |
7.15.1 |
guzzleUbuntu:24.04:LTS |
All versions, plus listed versions 7.4.5-1 |
None known |
guzzleUbuntu:26.10 |
All versions, plus listed versions 7.9.2-0.1build17.13.1-17.15.1-17.15.2-17.15.3-1 |
None known |
guzzleUbuntu:26.04:LTS |
All versions, plus listed versions 7.9.2-0.17.9.2-0.1build1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| affected | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-67354 is a high vulnerability (CVSS 8.2) in Guzzle, published July 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.37%, the 31st percentile. Fixed in guzzlehttp/guzzle 7.15.1.
References
github.com/guzzle/guzzle/security/advisories/GHSA-h95v-h523-3mw8
vulncheck.com/advisories/guzzlehttp-guzzle-before-uri-fragment-disclosure-via-referer
github.com/guzzle/guzzle/pull/3901
github.com/guzzle/guzzle/commit/7b68220d6543f6f80fe62e633361fc9d4ead14d4
github.com/guzzle/guzzle/releases/tag/7.15.1
nvd.nist.gov/vuln/detail/CVE-2026-67354
Show 7 moreShow less
github.com/advisories/GHSA-h95v-h523-3mw8
github.com/advisories/GHSA-mqq9-gxg5-m58g
github.com/CVEProject/cvelistV5/tree/main/cves/2026/67xxx/CVE-2026-67354.json
security-tracker.debian.org/tracker/CVE-2026-67354
github.com/guzzle/guzzle
ubuntu.com/security/CVE-2026-67354
cve.org/CVERecord?id=CVE-2026-67354
Left out here: 124 versions. The JSON record has them.