{"id":"CVE-2026-69246","summary":"Guzzle: Noncanonical host can bypass host-based checks","details":"Guzzle is an extensible PHP HTTP client. Prior to 7.15.2 and 8.0.1, Guzzle gives a transport the request URI as text and supplies the Host header separately. The cURL handlers set CURLOPT_URL to the URI exactly as written and push that Host into CURLOPT_HTTPHEADER; StreamHandler does the same through fopen(). libcurl then parses the authority itself, percent-decoding it and, on an IDN-capable build, applying IDNA mapping, and uses the result to resolve, connect, name the TLS peer and address a proxy CONNECT, while the supplied Host suppresses the aligned one libcurl would have generated. For a URI host written as 127.0.0.%31, filter_var() rejects the host as an IP literal, yet libcurl decodes it to 127.0.0.1 and reaches loopback with no DNS lookup while the server receives Host: 127.0.0.%31. An attacker who influences a fetched URI can therefore reach a host the application's checks excluded and read whatever the host exposes of the response. The same divergence moves Guzzle's own decisions onto a spelling the transport does not use: no_proxy selects proxy routing from the literal host, and RedirectMiddleware decides from it whether to strip Authorization and Cookie. Exploitation requires the application to build a request URI from untrusted input and to make a host decision before handing it to Guzzle. This issue is fixed in versions 7.15.2 and 8.0.1.","aliases":["GHSA-v5mv-p594-2x33"],"modified":"2026-08-05T08:56:56.675026862Z","published":"2026-08-03T21:07:04.228Z","related":["CGA-gh9j-5h6h-jq6x"],"database_specific":{"cna_assigner":"GitHub_M","cwe_ids":["CWE-180","CWE-436","CWE-918","CWE-941"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/69xxx/CVE-2026-69246.json"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/69xxx/CVE-2026-69246.json"},{"type":"FIX","url":"https://github.com/guzzle/guzzle/commit/3aeea0406aab88cbbd86531313d7cebf8ae149a4"},{"type":"FIX","url":"https://github.com/guzzle/guzzle/commit/744101956d78b7c1384d0cbf379db13e859167bf"},{"type":"FIX","url":"https://github.com/guzzle/guzzle/pull/3907"},{"type":"FIX","url":"https://github.com/guzzle/guzzle/pull/3908"},{"type":"WEB","url":"https://github.com/guzzle/guzzle/releases/tag/7.15.2"},{"type":"WEB","url":"https://github.com/guzzle/guzzle/releases/tag/8.0.1"},{"type":"ADVISORY","url":"https://github.com/guzzle/guzzle/security/advisories/GHSA-v5mv-p594-2x33"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-69246"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/guzzle/guzzle","events":[{"introduced":"643356760d8efce521dfce2587d63fd9d0c70d72"},{"fixed":"3aeea0406aab88cbbd86531313d7cebf8ae149a4"},{"introduced":"0"},{"fixed":"744101956d78b7c1384d0cbf379db13e859167bf"}],"database_specific":{"extracted_events":[{"introduced":"8.0.0"},{"fixed":"8.0.1"},{"introduced":"0"},{"fixed":"7.15.2"}],"source":"AFFECTED_FIELD"}}],"versions":["7.15.1","8.0.0","7.15.0","7.14.0","7.13.1","7.13.0","7.11.0","7.10.0","7.9.3","7.9.2","7.9.1","7.9.0","7.8.1","7.8.0","7.7.0","7.6.1","7.6.0","7.5.1","7.5.0","7.4.5","7.4.4","7.4.3","7.4.2","7.4.1","7.4.0","7.3.0","7.2.0","7.1.1","7.1.0","7.0.0","7.0.0-rc.1","7.0.0-beta.2","7.0.0-beta.1","6.5.0","6.4.1","6.4.0","6.3.3","6.3.2","6.3.1","6.3.0","6.2.2","6.2.1","4.2.3","6.2.0","6.1.1","6.1.0","6.0.2","6.0.1","6.0.0","5.3.0","5.2.0","5.1.0","5.0.3","5.0.2","5.0.1","5.0.0","4.2.2","4.2.1","4.2.0","4.1.8","4.1.7","4.1.6","4.1.5","4.1.4","4.1.3","4.1.2","4.1.1","4.1.0","4.0.2","4.0.1","4.0.0","4.0.0-rc.2","4.0.0-rc.1","v3.8.1","v3.8.0","v3.7.4","v3.7.3","v3.7.2","v3.7.1","v3.7.0","v3.6.0","v3.5.0","v3.4.3","v3.4.2","v3.4.1","v3.4.0","v3.3.1","v3.3.0","v3.2.0","v3.1.2","v3.1.1","v3.1.0","v3.0.7","v3.0.6","v3.0.5","v3.0.4","v3.0.3","v3.0.2","v3.0.1","v3.0.0","v2.8.8","v2.8.7","v2.8.6","v2.8.5","v2.8.4","v2.8.3","v2.8.2","v2.8.1","v2.8.0","v2.7.2","v2.7.1","v2.7.0","v2.6.6","v2.6.5","v2.6.4","v2.6.3","v2.6.2","v2.6.1","v2.6.0","v2.5.0","v2.4.1","v2.4.0","v2.3.2","v2.3.1","v2.3.0","v2.2.4","v2.2.3","v2.2.2","v2.2.1","v2.2.0","v2.1.4","v2.1.3","v2.1.2","v2.1.1","v2.1.0","v2.0.5","v2.0.4","v2.0.3","v2.0.2","v2.0.1","v2.0.0","v1.0.3","v1.0.2","v1.0.1","v1.0.0","v1.0.0beta1"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-69246.json"}}],"schema_version":"1.8.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N"}]}