Every CVE Search/ Get API key

CVE-2026-67354

guzzlehttp/guzzle before 7.15.1 URI Fragment Disclosure via Referer

8.2 HighFix available

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

0.37%Up 0.1 points since Aug 2, 2026
90%50%10%1%

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 HighCVSS: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 MediumCVSS: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 HighCVSS: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 MediumCVSS: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 HighCVSS: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 MediumCVSS: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 HighCVSS: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 MediumCVSS: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 HighCVSS: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 HighCVSS: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 MediumCVSS: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 HighCVSS: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 MediumCVSS: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 HighCVSS: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 MediumCVSS: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

Affected packages
PackageAffectedFixed
guzzlehttp/guzzle
Packagist
before 7.15.1
7.15.1
guzzlehttp/guzzle
TuxCare: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/guzzle
TuxCare: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/guzzle
TuxCare: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/guzzle
TuxCare: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/guzzle
TuxCare: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
guzzle
Debian: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 less
7.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
guzzle
Debian: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 less
7.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
guzzle
Debian: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 less
7.14.0-17.14.1-17.14.2-17.15.0-17.9.2-0.1
7.15.1-1
guzzlehttp/guzzle
Packagist
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 less
4.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
guzzle
Ubuntu:24.04:LTS
All versions, plus listed versions
7.4.5-1
None known
guzzle
Ubuntu: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
guzzle
Ubuntu:26.04:LTS
All versions, plus listed versions
7.9.2-0.17.9.2-0.1build1
None known

History

History
RecordedChangedSources
affected, facts
affected
first indexedCVE 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

Show 7 moreShow less
This page doesn't list everything

Left out here: 124 versions. The JSON record has them.

MoveEnter Open